一、基础层

登录:mysql -h主机名 -P端口号 -u用户名 -p密码(默认端口3306,用户root)
退出:exit或ctrl+c

1. 操作文件夹(库,database(s))
   增:create database db1;    查:show databases;    改:alter database db1 charset latin1; 只能更改数据库的字符集、校对规则名这种全局特性。
   删: drop database db1;
2. 操作文件(表,table先切换到文件夹下:use db1
   增:create table 表名t1(列名id  列类型int,name char);      查:show tables;      改:alter table t1 modify name char(3);
      alter table t1 change name name1 char(2);            删:drop table t1;    
3. 操作文件中的内容(记录)
   增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');      查:select * from t1;
   改:update t1 set name='sb' where id=2;                            删:delete from t1 where id=1;
4. 客户端查询:SELECT VERSION();#查看当前版本号 SELECT DATABASE();#查看当前库 SELECT USER();#查看当前用户
例库结构:employees表,   `department_id`,`department_name`,`manager_id`,`location_id`等列名(字段)
二、基础查询
1.查询表中的单个字段: SELECT (DISTINCT)last_name FROM employees; DISTINCT去重
2.查询表中的多个字段: SELECT last_name,salary,email FROM employees;
3.查询表中所有字段: SELECT * FROM employees ;
4.查询常量值: SELECT 100; SELECT 'john'; 5.查询表达式: SELECT 100%98; 6.查询函数:SELECT f(); 7.起别名: 用“AS”或空格
8.“+”只能是运算符,无连接字符功能,连接功能用concat(),执行+运算时,字符型强制转换为数值,尤其注意:只要“+”其中一方为null,则结果为null
9.判断是否为空用IFNULL(表达式,表达式为“null”时的返回值),若表达式值非"null",返回表达式本身;如IFNULL("H","R")返回"H",IFNULL(NULL,"R")返回"R"

三、条件查询 select *** from 表名 where 查询条件
1.按条件表达式筛: > < = != <>(不等于) >= <=
2.按逻辑表达式
筛: && || ! and or not
3.模糊查询
like 常搭配的通配符:(1)% 0到任意多个字符(2) _ 任意单个字符 select * from T1 where id like "%a%"
   between and  注意包含临界值 select * from T1 where id between 80 and 100 
in (列表) 用于判断某字段的值是否属于in列表中的某一项,使语句简洁  select * from T1 where job_id IN ('101','103','105');
is (not) null 判断某字段的值是否为null,注意不能用"="或"<>"来判断null,但可用安全等于符号"<=>"
4.排序:  order by 排序列表 [asc|desc] 按名字长度升序、编号降序查询 SELECT * FROM T1 ORDER BY LENGTH(last_name) ASC,id DESC;

四、常见函数 关键:(a)叫什么(函数名);(b)干什么(功能) 调用select 函数名(实参列表) [from 表(根据需要)];
1.字符函数: (1)lenth(),concat(),upper(),lower()
(2)substrsubstring(str, pos, len)由 <str> 中的第 <pos> 位置开始,选出接下去的 <len> 个字元。若无<len>,则选到结尾。
例:将姓名首字符大写,其他字符小写,用_拼接:来SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) output(别名) FROM employees;
       (3)instr(str,SUBstr) 返回子串的起始索引数,找不到返回0 例:SELECT INSTR('杨不悔爱上了殷六侠','殷六侠') AS out_put
       (4)trim(str) 去除字符 例:(a)默认去除首尾空格SELECT LENGTH(TRIM(' 张翠山 ')) (b)去除首尾的指定字符SELECT TRIM('a' FROM 'aa张aa翠山aaa')
                   (c)LTRIM(str) 去除左空格    (d)RLTRIM(str) 去除右空格
      (5)lpadRpad(str1,length,str2) 若str1的长度没有length那么长,则使用str2(左、右)填充;若str1的长度大于length,则截断。
       (6)replace(str1, a, b) 把str1中出现a的全部替换为b 例:select replace('aaa.163.com','a','w')—>www.163.com
2.数学函数:  (1)ROUND(1.567,2);#1.57,小数点后保留2位; (2)CEIL(-1.02);#-1 向上取整(返回>=该参数的最小整数) FLOOR(-9.99);#-10 向下取整,返回<=该参数的最大整数
        (3)truncate 截断 TRUNCATE(1.65,1);#1.6; (4)mod 取余 MOD(10,-3);#1

3.日期函数: (1)now():返回当前系统日期 + 时间 (2)curdate() 返回当前系统日期,不包含时间 (3)curtime() 返回当前时间,不包含日期
       (4)获取指定的部分,年,月,日,小时,分,秒: YEAR('1998-1-1')年,MONTH(NOW())月,hour,minute,second
       (5)格式转换:STR_TO_DATE(str,format)将时间格式的字符串(str),按format格式转换为DATETIME类型的值。
               DATE_FORMAT(date,format)函数则是把数据库的日期转换为对应的字符串格式 与上面函数互为逆操作
4.流程控制函数: (1)if函数: SELECT IF(10>5,'大','小'); (2)case函数 使用一: switch case的效果 适用于等值判断 使用二: 类似于多重if 适用于区间类判断
SELECT salary,department_id,
CASE department_id                    #case 要判断的字段或表达式
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END   (AS 新工资)
FROM employees
SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END  (AS 工资级别)
FROM employees;
5.分组函数: (1)数值型: sum 求和、avg平均值 (2)任何类型:max、min、count计算个数  如:SELECT COUNT(*) FROM 表employees;#统计表的行数;某行只要有一列不为空,则算上
      
  共性:(1)忽略null值 (2)可以和distinct搭配实现去重

6.分组查询select 分组函数(max等),列(需出现在group by后) from 表 【分组筛选:where 筛选条件】
【分组筛选:having 筛选条件】 group by 分组的列表order by】子句
       group by子句支持(1)单个字段分组(2)多个字段分组(多个字段之间用逗号隔开无顺序要求)(3)表达式或函数(用的较少)

7.连接(多表)查询: 关键:添加有效的连接条件,以避免多表连接时的笛卡儿积现象

特别注意:
  where是从数据表中的字段直接进行的筛选,而having是从已筛选的字段再筛选,即:
  where 是针对数据库文件(数据库已有字段)的发挥作用,而having是针对结果集发挥作用。
  因此,通常而言,WHERE 子句作用于表和视图,HAVING 子句常作用于组group by之后。