一、基本概念
1、DB
- database,数据库
2、DBMS
- 数据库管理系统
二、数据库存储数据的特点
- 列->表->库
- 表名唯一
三、MySQL配置文件
- my.ini:服务端配置(mysqld)
- 端口
- 路径
- 引擎
四、常见命令
- show databases;
- use tablename;
- show tables;
- show tables from dbname;
- desc table_name; 查看表结构
- 查看数据库版本
- select version();
- mysql —version
- mysql -V
五、语法规则
- 不区分大小写,建议关键字大些,表名列名大写
- 分号结尾
- 注释:
- 单行:# ,—(空格)
- 多行:/**/
六、DQL语言
1、基础查询
- 查询结果是一个虚表 ```python select 查询列表 from 表名;
查询列表:字段、常量、表达式、函数
- 别名```sql#方法1select xx as X from tablename;#方法2select xx X from tablename;#有特殊符号select xx as "X Y" from tablename;
去重
select distinct
+号
- 数值型直接做加法
- 如果一个加数为字符型,会强制转换成数字类型,如果转换失败,则转换成0
- 如果一个为null,结果肯定为null
concat
- 条件运算符:> < = != <> >= <=
- 逻辑运算符:&& || ! and or not
- 模糊查询
- like:一般和通配符搭配
- %:任意多个字符
- _:任意单个字符
- 转译字符 ```sql lastname like ‘_%’;
- like:一般和通配符搭配
任意转义字符(escape)
lastname like ‘$_%’ ESCAPE ‘$’;
- between and- 左右闭区间```sqlid BETWEEN 100 AND 200;
in
- 不支持通配符
id IN(10,20,30);
- 不支持通配符
is null
- 错误写法:= NULL,!= NULL ```sql last_name IS NULL;
last_name IS NOT NULL;
- **安全等于**- <=>```sqllast_name <=> NULL;last_name <=> "aaa";
3、排序查询
- order by 排序列表 asc|desc,放在查询子句最后面 ```sql SELECT FROM employees ORDER BY salary DESC; SELECT FROM employees ORDER BY salary ASC;
按表达式排序
SELECT ,salary12*(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY 年薪 DESC;
按函数排序
SELECT LENGTH(‘john’) FROM employees ORDER BY LENGTH(‘john’) DESC;
多重排序:第一个相同的所有再按第二个排序
SELECT * FROM employees ORDER BY salary ASC, employee_id DESC;
<a name="v8V1c"></a>## 七、常见函数- 单行函数- 分组函数(聚合函数、组函数)<a name="ASP1Z"></a>### 1、字符函数- length:获取字节个数```cppselect length('join'); //4select length('哈哈'); //2*3= 6个字节 ,utf-8编码select length('哈哈'); //2*2= 4个字节 ,GBK编码show variables like '%char%';
concat
select concat(A,'_',B) name from employees; //name是别名
upper\lower:大小写
select UPPER('aa'); //AA
substr\ substring
- sql中索引从1开始 ```cpp select substr(‘aaaccc’,3); //accc ,截取从3处开始所有长度
select substr(‘aaaccc’,1,3); //aaa,截取从1处3个字符
//首字符大写 select concat(UPPER(substr(lastname,1,1)),’‘,UPPER(substr(first_name,1,1)));
- instr- **返回子串的起始索引,没有找到返回0**```cppselect instr('aaaccc','aaa') as out_put; //1
trim
- 去前后空格或自定义字符
select trim('a' from 'aaacccaaa'); //cccselect trim('aa' from 'aaacccaaa'); //accca
- 去前后空格或自定义字符
lpad、rpad
- 用指定的字符实现左/右填充指定长度 ```cpp select LPAD(‘aaa’,10,’‘);//**aaa
select LPAD(‘aaa’,22,’*’);//aa,右截断
- replace```cppselect replace('aaaccc','aaa','bbb'); //bbbccc
2、数学函数
round()
- 四舍五入(能保留指定位数)
select round(-1.55); //-2select round(1.567,2); //1.57
- 四舍五入(能保留指定位数)
ceil
- 向上取整 (>=的最小整数)
select ceil(1.52);//2
- 向上取整 (>=的最小整数)
floor
- 向下取整 (<=的最大整数)
truncate
- 截断,小数点后保留位数
select truncate(1.65,1); //1.6
- 截断,小数点后保留位数
mod
select now();
- 当前日期+时间
- curdate();
- 当前日期
- curtime();
- 当前时间
year(NOW());
- n年
year('1998-1-1');select year(hiredate) from employees;
- n年
month()
select month(now());select monthname(now()); //英文名称
str_to_date
- 字符 to 日期
str_to_date('9-13-1999','%m-%d-%Y');

- 字符 to 日期
date_format
select version()
- select database(); //当前数据库
- select user(); //当前用户
