• 数据查询语句:DQL(Data Query Language)


    一、基础查询

      1、语法:select 查询列表 from 表名;

       2、特点:① 通过select查询完的结果,是一个虚拟的表格,不是真实存在

             ② 查询列表可以是:字段、表达式、常量、函数等

             ③ select后面跟的查询列表,可以有多个部分组成,中间用逗号隔开

             ④ 使用前需打开指定的数据库,USE 表名;

                           执行顺序:① from子句  -->  ② select子句

     1 #一、查询常量
     2 SELECT 100;
     3 
     4 #二、查询表达式
     5 SELECT 100%3;
     6 
     7 #三、查询单个字段
     8 SELECT `last_name` FROM `employees`;
     9 
    10 #四、查询多个字段
    11 SELECT `last_name`,`email`,`employee_id` FROM employees;
    12 
    13 #五、查询所有字段
    14 SELECT * FROM `employees`;
    15 
    16 #F12:对齐格式
    17 SELECT 
    18     `last_name`,
    19     `first_name`,
    20     `last_name`,
    21     `commission_pct`,
    22     `hiredate`,
    23     `salary` 
    24 FROM
    25     employees ;
    26     
    27 #六、查询函数(调用函数,获取返回值)
    28 SELECT DATABASE();
    29 SELECT VERSION();
    30 SELECT USER();
    31 
    32 #七、起别名
    33 #方式一:使用as关键字
    34 
    35 SELECT USER() AS 用户名;
    36 SELECT USER() AS "用户名";
    37 SELECT USER() AS '用户名';
    38 
    39 SELECT last_name AS "姓 名" FROM employees;
    40 
    41 #方式二:使用空格
    42 
    43 SELECT USER() 用户名;
    44 SELECT USER() "用户名";
    45 SELECT USER() '用户名';
    46 
    47 SELECT last_name "姓 名" FROM employees;
    48 
    49 
    50 #八、+的作用
    51 -- 需求:查询 first_name 和last_name 拼接成的全名,最终起别名为:姓 名
    52 
    53 #方案1:使用+    pass×
    54 SELECT first_name+last_name AS "姓 名" FROM employees;
    55 
    56 #方案2:使用concat拼接函数
    57 SELECT CONCAT(first_name,last_name) AS "姓 名" FROM employees;
    58 
    59 /*
    60 
    61 Java中+的作用:
    62 1、加法运算
    63     100+1.5      'a'+2    1.3+'2'
    64     
    65 2、拼接符
    66     至少有一个操作数为字符串
    67     "hello"+'a'
    68     
    69     
    70 mysql中+的作用:
    71 1、加法运算
    72 
    73 ①两个操作数都是数值型
    74 100+1.5
    75 
    76 ②其中一个操作数为字符型
    77 将字符型数据强制转换成数值型,如果无法转换,则直接当做0处理
    78 
    79 '张无忌'+100===>100
    80 
    81 
    82 ③其中一个操作数为null
    83 
    84 null+null====》null
    85 
    86 null+100====》 null
    87 
    88 */
    89     
    90 #九、distinct的使用
    91 
    92 #需求:查询员工涉及到的部门编号有哪些
    93 SELECT DISTINCT department_id FROM employees;
    94 
    95 #十、查看表的结构
    96 
    97 DESC employees;
    98 SHOW COLUMNS FROM employees;
    View Code

    二、条件查询

      1、语法:select 查询列表 from 表名 where 筛选条件;

      2、执行顺序:①from子句    --> ②where子句 -->    ③select子句

      3、特点:① 按关系表达式筛选:关系运算符:>   <    >=   <=     =       <>

            ② 按逻辑表达式筛选:逻辑运算符:and    or   not

            ③ 模糊查询:like、in、between and、is null

      1 #一、按关系表达式筛选
      2 #案例1:查询部门编号不是100的员工信息
      3 SELECT * FROM employees WHERE department_id <> 100;
      4 
      5 #案例2:查询工资<15000的姓名、工资
      6 SELECT last_name,salary FROM employees WHERE salary<15000;
      7 
      8 #二、按逻辑表达式筛选
      9 
     10 #案例1:查询部门编号不是 50-100之间员工姓名、部门编号、邮箱
     11 #方式1:
     12 SELECT last_name,department_id,email FROM employees WHERE department_id <50 OR department_id>100;
     13 
     14 #方式2:
     15 SELECT last_name,department_id,email FROM employees WHERE NOT(department_id>=50 AND department_id<=100);
     16 
     17 #案例2:查询奖金率>0.03 或者 员工编号在60-110之间的员工信息
     18 SELECT * FROM employees WHERE commission_pct>0.03 OR (employee_id >=60 AND employee_id<=110);
     19 
     20 #三、模糊查询
     21 #1like
     22 /*
     23 功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询
     24 常见的通配符:
     25 _ 任意单个字符
     26 % 任意多个字符,支持0-多个
     27 like/not like 
     28 */
     29 #案例1:查询姓名中包含字符a的员工信息
     30 SELECT * FROM employees WHERE last_name LIKE '%a%';
     31 
     32 #案例2:查询姓名中包含最后一个字符为e的员工信息
     33 SELECT * FROM employees WHERE last_name LIKE '%e';
     34 
     35 #案例3:查询姓名中包含第一个字符为e的员工信息
     36 SELECT * FROM employees WHERE last_name LIKE 'e%';
     37 
     38 #案例4:查询姓名中包含第三个字符为x的员工信息
     39 SELECT * FROM employees WHERE last_name LIKE '__x%';
     40 
     41 #案例5:查询姓名中包含第二个字符为_的员工信息
     42 SELECT * FROM employees WHERE last_name LIKE '_\_%';
     43 
     44 SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
     45 
     46 #2in
     47 /*
     48 功能:查询某字段的值是否属于指定的列表之内
     49 
     50 a  in(常量值1,常量值2,常量值3,...)
     51 a not in(常量值1,常量值2,常量值3,...)
     52 
     53 in/not in
     54 */
     55 
     56 #案例1:查询部门编号是30/50/90的员工名、部门编号
     57 
     58 #方式1:
     59 SELECT last_name,department_id FROM employees WHERE department_id IN(30,50,90);
     60 
     61 #方式2:
     62 SELECT last_name,department_id
     63 FROM employees
     64 WHERE department_id = 30
     65 OR department_id = 50
     66 OR department_id = 90;
     67 
     68 #案例2:查询工种编号不是SH_CLERK或IT_PROG的员工信息
     69 #方式1:
     70 SELECT * FROM employees WHERE job_id NOT IN('SH_CLERK','IT_PROG');
     71 
     72 #方式2:
     73 SELECT * FROM employees WHERE NOT(job_id ='SH_CLERK' OR job_id = 'IT_PROG');
     74 
     75 #3between and
     76 /*
     77 功能:判断某个字段的值是否介于xx之间
     78 
     79 between and/not between and
     80 
     81 */
     82 #案例1:查询部门编号是30-90之间的部门编号、员工姓名
     83 
     84 #方式1:
     85 SELECT department_id,last_name FROM employees WHERE department_id BETWEEN 30 AND 90;
     86 
     87 #方式2:
     88 
     89 SELECT department_id,last_name FROM employees WHERE department_id>=30 AND department_id<=90;
     90 
     91 #案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪
     92 SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
     93 FROM employees
     94 WHERE salary*12*(1+IFNULL(commission_pct,0))<100000 OR salary*12*(1+IFNULL(commission_pct,0))>200000;
     95 
     96 SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
     97 FROM employees
     98 WHERE salary*12*(1+IFNULL(commission_pct,0)) NOT BETWEEN 100000 AND 200000;
     99 
    100 #4is null/is not null
    101 
    102 #案例1:查询没有奖金的员工信息
    103 SELECT * FROM employees WHERE commission_pct IS NULL;
    104 
    105 #案例2:查询有奖金的员工信息
    106 SELECT * FROM employees WHERE commission_pct IS NOT NULL;
    107 
    108 SELECT * FROM employees WHERE salary IS 10000;
    109 
    110 #----------------对比------------------------------------
    111 
    112 =        只能判断普通的内容
    113 
    114 IS              只能判断NULL值
    115 
    116 <=>             安全等于,既能判断普通内容,又能判断NULL值
    117 
    118 SELECT * FROM employees WHERE salary <=> 10000;
    119 
    120 SELECT * FROM employees WHERE commission_pct <=> NULL;
    View Code

    三、排序查询

      1、语法:select 查询列表 from 表名【where 筛选条件】 order by 排序列表

       2、执行顺序:①from子句  ②where子句  ③select子句  ④order by 子句

       3、特点:①、排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合

           ②、升序,通过asc,默认行为降序,通过desc

     1 #一、按单个字段排序
     2 #案例1:将员工编号>120的员工信息进行工资的升序
     3 SELECT * FROM employees ORDER BY salary ;
     4 
     5 #案例1:将员工编号>120的员工信息进行工资的降序
     6 SELECT * FROM employees WHERE employee_id>120 ORDER BY salary DESC;
     7 
     8 #二、按表达式排序
     9 #案例1:对有奖金的员工,按年薪降序
    10 SELECT *,salary*12*(1+IFNULL(commission_pct,0))  年薪
    11 FROM employees
    12 WHERE commission_pct IS NOT NULL
    13 ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
    14 
    15 #三、按别名排序
    16 #案例1:对有奖金的员工,按年薪降序
    17 SELECT *,salary*12*(1+IFNULL(commission_pct,0))  年薪 FROM employees ORDER BY 年薪 DESC;
    18 
    19 #四、按函数的结果排序
    20 
    21 #案例1:按姓名的字数长度进行升序
    22 SELECT last_name FROM employees ORDER BY LENGTH(last_name);
    23 
    24 #五、按多个字段排序
    25 #案例1:查询员工的姓名、工资、部门编号,先按工资升序,再按部门编号降序
    26 
    27 SELECT last_name,salary,department_id
    28 FROM employees
    29 ORDER BY salary ASC,department_id DESC;
    30 
    31 
    32 #六、补充选学:按列数排序
    33 SELECT * FROM employees ORDER BY 2 DESC;
    34 
    35 SELECT * FROM employees ORDER BY first_name;
    View Code

    四、常见函数

      1、字符函数

     1 1、CONCAT 拼接字符
     2 
     3 SELECT CONCAT('hello,',first_name,last_name)  备注 FROM employees;
     4 
     5 2、LENGTH 获取字节长度
     6 
     7 SELECT LENGTH('hello,郭襄');
     8 
     9 3、CHAR_LENGTH 获取字符个数
    10 SELECT CHAR_LENGTH('hello,郭襄');
    11 
    12 4SUBSTRING 截取子串
    13 /*
    14 注意:起始索引从1开始!!!
    15 substr(str,起始索引,截取的字符长度)
    16 substr(str,起始索引)
    17 */
    18 SELECT SUBSTR('张三丰爱上了郭襄',1,3);
    19 SELECT SUBSTR('张三丰爱上了郭襄',7);
    20 
    21 5、INSTR获取字符第一次出现的索引
    22 
    23 SELECT INSTR('三打白骨精aaa白骨精bb白骨精','白骨精');
    24 
    25 6、TRIM去前后指定的字符,默认是去空格
    26 
    27 
    28 SELECT TRIM(' 虚  竹    ')  AS a;
    29 SELECT TRIM('x' FROM 'xxxxxx虚xxx竹xxxxxxxxxxxxxxxxxx')  AS a;
    30 
    31 7、LPAD/RPAD  左填充/右填充
    32 SELECT LPAD('木婉清',10,'a');
    33 SELECT RPAD('木婉清',10,'a');
    34 
    35 8UPPER/LOWER  变大写/变小写
    36 
    37 #案例:查询员工表的姓名,要求格式:姓首字符大写,其他字符小写,名所有字符大写,且姓和名之间用_分割,最后起别名“OUTPUT”
    38 
    39 
    40 SELECT UPPER(SUBSTR(first_name,1,1)),first_name FROM employees;
    41 SELECT LOWER(SUBSTR(first_name,2)),first_name FROM employees;
    42 SELECT UPPER(last_name) FROM employees;
    43 
    44 SELECT CONCAT(UPPER(SUBSTR(first_name,1,1)),LOWER(SUBSTR(first_name,2)),'_',UPPER(last_name)) "OUTPUT"
    45 FROM employees;
    46 
    47 9、STRCMP 比较两个字符大小
    48 
    49 SELECT STRCMP('aec','aec');
    50 
    51 10LEFT/RIGHT  截取子串
    52 SELECT LEFT('鸠摩智',1);
    53 SELECT RIGHT('鸠摩智',1);
    View Code

      2、数学函数

     1 1ABS 绝对值
     2 SELECT ABS(-2.4);
     3 2、CEIL 向上取整  返回>=该参数的最小整数
     4 SELECT CEIL(-1.09);
     5 SELECT CEIL(0.09);
     6 SELECT CEIL(1.00);
     7 
     8 3FLOOR 向下取整,返回<=该参数的最大整数
     9 SELECT FLOOR(-1.09);
    10 SELECT FLOOR(0.09);
    11 SELECT FLOOR(1.00);
    12 
    13 4ROUND 四舍五入
    14 SELECT ROUND(1.8712345);
    15 SELECT ROUND(1.8712345,2);
    16 
    17 5TRUNCATE 截断
    18 
    19 SELECT TRUNCATE(1.8712345,1);
    20 
    21 6、MOD 取余
    22 
    23 SELECT MOD(-10,3);
    24 a%b = a-(INT)a/b*b
    25 -10%3 = -10 - (-10)/3*3   = -1
    26 
    27 SELECT -10%3;
    28 SELECT 10%3;
    29 SELECT -10%-3;
    30 SELECT 10%-3;
    View Code

      3、日期函数

     1 1、NOW
     2 SELECT NOW();
     3 
     4 2、CURDATE
     5 
     6 SELECT CURDATE();
     7 
     8 3、CURTIME
     9 SELECT CURTIME();
    10 
    11 4DATEDIFF
    12 SELECT DATEDIFF('1998-7-16','2019-7-13');
    13 
    14 5、DATE_FORMAT
    15 
    16 SELECT DATE_FORMAT('1998-7-16','%Y年%M月%d日 %H小时%i分钟%s秒') 出生日期;
    17 
    18 SELECT DATE_FORMAT(hiredate,'%Y年%M月%d日 %H小时%i分钟%s秒')入职日期 
    19 FROM employees;
    20 
    21 6、STR_TO_DATE 按指定格式解析字符串为日期类型
    22 SELECT * FROM employees
    23 WHERE hiredate<STR_TO_DATE('3/15 1998','%m/%d %Y');
    View Code

      4、流程控制函数

     1 1、IF函数
     2 SELECT IF(100>9,'','');
     3 
     4 #需求:如果有奖金,则显示最终奖金,如果没有,则显示0
     5 SELECT IF(commission_pct IS NULL,0,salary*12*commission_pct)  奖金,commission_pct
     6 FROM employees;
     7 
     8 2、CASE函数
     9 
    10 ①情况1 :类似于switch语句,可以实现等值判断
    11 CASE 表达式
    12 WHEN 值1 THEN 结果1
    13 WHEN 值2 THEN 结果2
    14 ...
    15 ELSE 结果n
    16 END
    17 
    18 案例:
    19 部门编号是30,工资显示为2倍
    20 部门编号是50,工资显示为3倍
    21 部门编号是60,工资显示为4倍
    22 否则不变
    23 
    24 显示 部门编号,新工资,旧工资
    25 
    26 SELECT department_id,salary,
    27 CASE department_id
    28 WHEN 30 THEN salary*2
    29 WHEN 50 THEN salary*3
    30 WHEN 60 THEN salary*4
    31 ELSE salary
    32 END  newSalary
    33 FROM employees;
    34 
    35 ②情况2:类似于多重IF语句,实现区间判断
    36 CASE 
    37 WHEN 条件1 THEN 结果1
    38 WHEN 条件2 THEN 结果2
    39 ...
    40 ELSE 结果n
    41 END
    42 
    43 案例:如果工资>20000,显示级别A
    44       工资>15000,显示级别B
    45       工资>10000,显示级别C
    46       否则,显示D
    47       
    48  SELECT salary,
    49  CASE 
    50  WHEN salary>20000 THEN 'A'
    51  WHEN salary>15000 THEN 'B'
    52  WHEN salary>10000 THEN 'C'
    53  ELSE 'D'
    54  END
    55  AS  a
    56  FROM employees; 
    View Code

    五、分组函数

      1、说明:分组函数往往用于实现将一组数据进行统计计算,最终得到一个值,又称为聚合函数或统计函数

         2、分组函数清单:

       sum(字段名):求和

       avg(字段名):求平均数

         max(字段名):求最大值

         min(字段名):求最小值

        count(字段名):计算非空字段值的个数

     1 #案例1 :查询员工信息表中,所有员工的工资和、工资平均值、最低工资、最高工资、有工资的个数
     2 
     3 SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary) FROM employees;
     4 
     5 #案例2:添加筛选条件
     6     #①查询emp表中记录数:
     7     SELECT COUNT(employee_id) FROM employees;
     8 
     9     #②查询emp表中有佣金的人数:
    10     
    11     SELECT COUNT(salary) FROM employees;
    12     
    13     #③查询emp表中月薪大于2500的人数:
    14     SELECT COUNT(salary) FROM employees WHERE salary>2500;
    15 
    16 17     #④查询有领导的人数:
    18     SELECT COUNT(manager_id) FROM employees;
    19     
    20 #count的补充介绍★
    21 
    22 #1、统计结果集的行数,推荐使用count(*)
    23     
    24 SELECT COUNT(*) FROM employees;
    25 SELECT COUNT(*) FROM employees WHERE department_id = 30;
    26 
    27 SELECT COUNT(1) FROM employees;
    28 SELECT COUNT(1) FROM employees WHERE department_id = 30;
    29 
    30 #2、搭配distinct实现去重的统计
    31 
    32 #需求:查询有员工的部门个数
    33 
    34 SELECT COUNT(DISTINCT department_id) FROM employees;
    35 
    36 #思考:每个部门的总工资、平均工资?
    37 
    38 SELECT SUM(salary)  FROM employees WHERE department_id = 30;
    39 SELECT SUM(salary)  FROM employees WHERE department_id = 50;
    40 
    41 SELECT SUM(salary) ,department_id
    42 FROM employees
    43 GROUP BY department_id;
    View Code

    六、分组查询

      1、语法:select 查询列表 from 表名 where 筛选条件 group by 分组列表 having 分组后筛选 order by 排序列表;

      2、执行顺序:①from子句 ②where子句 ③group by 子句 ④having子句 ⑤select子句 ⑥order by子句

      3、特点:① 查询列表往往是  分组函数和被分组的字段 ★

            ② 分组函数做条件只可能放在having后面!!!

            ③ 分组查询中的筛选分为两类

      筛选的基表 使用的关键词 位置
    分组前筛选 原始表 where group by 的前面
    分组后筛选 分组后的结果集 having group by的后面
      1 #1)简单的分组
      2 #案例1:查询每个工种的员工平均工资
      3 
      4 SELECT AVG(salary),job_id FROM employees GROUP BY job_id;
      5 
      6 #案例2:查询每个领导的手下人数
      7 
      8 SELECT COUNT(*),manager_id
      9 FROM employees
     10 WHERE manager_id IS NOT NULL
     11 GROUP BY manager_id;
     12 
     13 #2)可以实现分组前的筛选
     14 #案例1:查询邮箱中包含a字符的 每个部门的最高工资
     15 SELECT MAX(salary) 最高工资,department_id
     16 FROM employees
     17 WHERE email LIKE '%a%'
     18 GROUP BY department_id;
     19 
     20 #案例2:查询每个领导手下有奖金的员工的平均工资
     21 SELECT AVG(salary) 平均工资,manager_id
     22 FROM employees
     23 WHERE commission_pct IS NOT NULL
     24 GROUP BY manager_id;
     25 
     26 #3)可以实现分组后的筛选
     27 #案例1:查询哪个部门的员工个数>5
     28 #分析1:查询每个部门的员工个数
     29 SELECT COUNT(*) 员工个数,department_id
     30 FROM employees
     31 GROUP BY department_id
     32 
     33 #分析2:在刚才的结果基础上,筛选哪个部门的员工个数>5
     34 
     35 SELECT COUNT(*) 员工个数,department_id
     36 FROM employees
     37 
     38 GROUP BY department_id
     39 HAVING  COUNT(*)>5;
     40 
     41 #案例2:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
     42 
     43 SELECT job_id,MAX(salary)
     44 FROM employees
     45 WHERE commission_pct  IS NOT NULL
     46 GROUP BY job_id
     47 HAVING MAX(salary)>12000;
     48 
     49 #案例3:领导编号>102的    每个领导手下的最低工资大于5000的最低工资
     50 #分析1:查询每个领导手下员工的最低工资
     51 SELECT MIN(salary) 最低工资,manager_id
     52 FROM employees
     53 GROUP BY manager_id;
     54 
     55 #分析2:筛选刚才1的结果
     56 SELECT MIN(salary) 最低工资,manager_id
     57 FROM employees
     58 WHERE manager_id>102
     59 GROUP BY manager_id
     60 HAVING MIN(salary)>5000 ;
     61 
     62 #4)可以实现排序
     63 #案例:查询没有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序
     64 #分析1:按工种分组,查询每个工种有奖金的员工的最高工资
     65 SELECT MAX(salary) 最高工资,job_id
     66 FROM employees
     67 WHERE commission_pct IS  NULL
     68 GROUP BY job_id
     69 
     70 #分析2:筛选刚才的结果,看哪个最高工资>6000
     71 SELECT MAX(salary) 最高工资,job_id
     72 FROM employees
     73 WHERE commission_pct IS  NULL
     74 GROUP BY job_id
     75 HAVING MAX(salary)>6000
     76 
     77 #分析3:按最高工资升序
     78 SELECT MAX(salary) 最高工资,job_id
     79 FROM employees
     80 WHERE commission_pct IS  NULL
     81 GROUP BY job_id
     82 HAVING MAX(salary)>6000
     83 ORDER BY MAX(salary) ASC;
     84 
     85 #5)按多个字段分组
     86 #案例:查询每个工种每个部门的最低工资,并按最低工资降序
     87 #提示:工种和部门都一样,才是一组
     88 
     89 工种    部门  工资
     90 1    10    10000
     91 1       20      2000
     92 2    20
     93 3       20
     94 1       10
     95 2       30
     96 2       20
     97 
     98 SELECT MIN(salary) 最低工资,job_id,department_id
     99 FROM employees
    100 GROUP BY job_id,department_id;
    View Code

    七、连接查询

      1、说明:又称多表查询,当查询语句涉及到的字段来自于多个表时,就会用到连接查询

       2、笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行

        发生原因:没有有效的连接条件

              如何避免:添加有效的连接条件

       3、按功能分类(SQL99语法):

        3.1 sql92标准:仅仅支持内连接:等值连接、非等值连接、自连接

      1 #一、内连接
      2 /*
      3 语法:
      4 select 查询列表
      5 from 表1 别名,表2 别名
      6 where 连接条件
      7 and 筛选条件
      8 group by 分组列表
      9 having 分组后筛选
     10 order by 排序列表
     11 
     12 执行顺序:
     13 1、from子句
     14 2、where子句
     15 3、and子句
     16 4、group by子句
     17 5、having子句
     18 6、select子句
     19 7、order by子句
     20 */
     21 
     22 #一)等值连接
     23 /*
     24 ① 多表等值连接的结果为多表的交集部分
     25 ②n表连接,至少需要n-1个连接条件
     26 ③ 多表的顺序没有要求
     27 ④一般需要为表起别名
     28 ⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
     29 */
     30 #案例1:查询女神名和对应的男神名
     31 SELECT NAME,boyName 
     32 FROM boys,beauty
     33 WHERE beauty.boyfriend_id= boys.id;
     34 
     35 #案例2:查询员工名和对应的部门名
     36 
     37 SELECT last_name,department_name
     38 FROM employees,departments
     39 WHERE employees.`department_id`=departments.`department_id`;
     40 
     41 #2、为表起别名
     42 /*
     43 ①提高语句的简洁度
     44 ②区分多个重名的字段
     45 
     46 注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
     47 
     48 */
     49 #查询员工名、工种号、工种名
     50 
     51 SELECT e.last_name,e.job_id,j.job_title
     52 FROM employees  e,jobs j
     53 WHERE e.`job_id`=j.`job_id`;
     54 
     55 #3、两个表的顺序是否可以调换
     56 
     57 #查询员工名、工种号、工种名
     58 
     59 SELECT e.last_name,e.job_id,j.job_title
     60 FROM jobs j,employees e
     61 WHERE e.`job_id`=j.`job_id`;
     62 
     63 #4、可以加筛选
     64 
     65 #案例:查询有奖金的员工名、部门名
     66 
     67 SELECT last_name,department_name,commission_pct
     68 
     69 FROM employees e,departments d
     70 WHERE e.`department_id`=d.`department_id`
     71 AND e.`commission_pct` IS NOT NULL;
     72 
     73 #案例2:查询城市名中第二个字符为o的部门名和城市名
     74 
     75 SELECT department_name,city
     76 FROM departments d,locations l
     77 WHERE d.`location_id` = l.`location_id`
     78 AND city LIKE '_o%';
     79 
     80 #5、可以加分组
     81 
     82 #案例1:查询每个城市的部门个数
     83 
     84 SELECT COUNT(*) 个数,city
     85 FROM departments d,locations l
     86 WHERE d.`location_id`=l.`location_id`
     87 GROUP BY city;
     88 
     89 #案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
     90 SELECT department_name,d.`manager_id`,MIN(salary)
     91 FROM departments d,employees e
     92 WHERE d.`department_id`=e.`department_id`
     93 AND commission_pct IS NOT NULL
     94 GROUP BY department_name,d.`manager_id`;
     95 #6、可以加排序
     96 
     97 #案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
     98 
     99 SELECT job_title,COUNT(*)
    100 FROM employees e,jobs j
    101 WHERE e.`job_id`=j.`job_id`
    102 GROUP BY job_title
    103 ORDER BY COUNT(*) DESC;
    104 
    105 #7、可以实现三表连接?
    106 
    107 #案例:查询员工名、部门名和所在的城市
    108 
    109 SELECT last_name,department_name,city
    110 FROM employees e,departments d,locations l
    111 WHERE e.`department_id`=d.`department_id`
    112 AND d.`location_id`=l.`location_id`
    113 AND city LIKE 's%'
    114 
    115 ORDER BY department_name DESC;
    116 
    117 #二)非等值连接
    118 
    119 
    120 #案例1:查询员工的工资和工资级别
    121 
    122 SELECT salary,grade_level
    123 FROM employees e,job_grades g
    124 WHERE salary BETWEEN g.`lowest_sal` AND g.`highest_sal`
    125 AND g.`grade_level`='A';
    126 
    127 #三)自连接
    128 
    129 #案例:查询 员工名和上级的名称
    130 
    131 SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
    132 FROM employees e,employees m
    133 WHERE e.`manager_id`=m.`employee_id`;
    View Code

        3.2 sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接

        ① 内连接:等值连接、非等值连接、自连接

                ② 外连接:左外连接、右外连接、全外连接

                ③ 交叉连接

      1 #一、内连接
      2 语法:
      3 SELECT 查询列表
      4 FROM 表名1 别名
      5INNERJOIN  表名2 别名
      6 ON 连接条件
      7 WHERE 筛选条件
      8 GROUP BY 分组列表
      9 HAVING 分组后筛选
     10 ORDER BY 排序列表;
     11 
     12 SQL92和SQL99的区别:SQL99使用JOIN关键字代替了之前的逗号,并且将连接条件和筛选条件进行了分离,提高阅读性!!!
     13 
     14 #一)等值连接
     15 #①简单连接
     16 #案例:查询员工名和部门名
     17 
     18 SELECT last_name,department_name
     19 FROM departments d 
     20 JOIN  employees e 
     21 ON e.department_id =d.department_id;
     22 
     23 #②添加筛选条件
     24 #案例1:查询部门编号>100的部门名和所在的城市名
     25 SELECT department_name,city
     26 FROM departments d
     27 JOIN locations l
     28 ON d.`location_id` = l.`location_id`
     29 WHERE d.`department_id`>100;
     30 
     31 #③添加分组+筛选
     32 #案例1:查询每个城市的部门个数
     33 
     34 SELECT COUNT(*) 部门个数,l.`city`
     35 FROM departments d
     36 JOIN locations l
     37 ON d.`location_id`=l.`location_id`
     38 GROUP BY l.`city`;
     39 
     40 #④添加分组+筛选+排序
     41 #案例1:查询部门中员工个数>10的部门名,并按员工个数降序
     42 
     43 SELECT COUNT(*) 员工个数,d.department_name
     44 FROM employees e
     45 JOIN departments d
     46 ON e.`department_id`=d.`department_id`
     47 GROUP BY d.`department_id`
     48 HAVING 员工个数>10
     49 ORDER BY 员工个数 DESC;
     50 
     51 
     52 #二)非等值连接
     53 #案例:查询部门编号在10-90之间的员工的工资级别,并按级别进行分组
     54 SELECT * FROM sal_grade;
     55 
     56 SELECT COUNT(*) 个数,grade
     57 FROM employees e
     58 JOIN sal_grade g
     59 ON e.`salary` BETWEEN g.`min_salary` AND g.`max_salary`
     60 WHERE e.`department_id` BETWEEN 10 AND 90
     61 GROUP BY g.grade;
     62 
     63 
     64 #三)自连接
     65 #案例:查询员工名和对应的领导名
     66 
     67 SELECT e.`last_name`,m.`last_name`
     68 FROM employees e
     69 JOIN employees m
     70 ON e.`manager_id`=m.`employee_id`;
     71 
     72 #二、外连接
     73 
     74 /*
     75 
     76 说明:查询结果为主表中所有的记录,如果从表有匹配项,则显示匹配项;如果从表没有匹配项,则显示null
     77 
     78 应用场景:一般用于查询主表中有但从表没有的记录
     79 
     80 特点:
     81 
     82 1、外连接分主从表,两表的顺序不能任意调换
     83 2、左连接的话,left join左边为主表
     84    右连接的话,right join右边为主表
     85 
     86 语法:
     87 
     88 select 查询列表
     89 from 表1 别名
     90 left|right|full 【outer】 join 表2 别名
     91 on 连接条件
     92 where 筛选条件;
     93 
     94 */
     95 USE girls;
     96 #案例1:查询所有女神记录,以及对应的男神名,如果没有对应的男神,则显示为null
     97 
     98 #左连接
     99 SELECT b.*,bo.*
    100 FROM beauty b
    101 LEFT JOIN boys bo ON b.`boyfriend_id` = bo.`id`;
    102 
    103 #右连接
    104 SELECT b.*,bo.*
    105 FROM boys bo
    106 RIGHT JOIN  beauty b ON b.`boyfriend_id` = bo.`id`;
    107 
    108 #案例2:查哪个女神没有男朋友
    109 
    110 #左连接
    111 SELECT b.`name`
    112 FROM beauty b
    113 LEFT JOIN boys bo ON b.`boyfriend_id` = bo.`id`
    114 WHERE bo.`id`  IS NULL;
    115 
    116 #右连接
    117 SELECT b.*,bo.*
    118 FROM boys bo
    119 RIGHT JOIN  beauty b ON b.`boyfriend_id` = bo.`id`
    120 WHERE bo.`id`  IS NULL;
    121 
    122 #案例3:查询哪个部门没有员工,并显示其部门编号和部门名
    123 
    124 SELECT COUNT(*) 部门个数
    125 FROM departments d
    126 LEFT JOIN employees e ON d.`department_id` = e.`department_id`
    127 WHERE e.`employee_id` IS NULL;
    View Code

    八、子查询

      1、说明:当一个查询语句中又嵌套了另一个完整的select语句,则被嵌套的select语句称为子查询或内查询

           外面的select语句称为主查询或外查询

      2、按子查询出现的位置进行分类:

        2.1 select后面

            要求:子查询的结果为单行单列(标量子查询)

        2.2 from后面

            要求:子查询的结果可以为多行多列

        2.3 where或having后面 ★

            要求:子查询的结果必须为单列:单行子查询,多行子查询

        2.4 exists后面

            要求:子查询结果必须为单列(相关子查询)

      1 #一、放在where或having后面
      2 #一)单行子查询
      3 
      4 #案例1:谁的工资比 Abel 高?
      5 
      6 #①查询Abel的工资
      7 SELECT salary
      8 FROM employees
      9 WHERE last_name  = 'Abel'
     10 #②查询salary>①的员工信息
     11 SELECT last_name,salary
     12 FROM employees
     13 WHERE salary>(
     14     SELECT salary
     15     FROM employees
     16     WHERE last_name  <> 'Abel'
     17 );
     18 
     19 #案例2:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资
     20 #①查询141号员工的job_id
     21 SELECT job_id
     22 FROM employees
     23 WHERE employee_id = 141
     24 
     25 #②查询143号员工的salary
     26 
     27 SELECT salary
     28 FROM employees
     29 WHERE employee_id = 143
     30 
     31 #③查询job_id=and salary>②的信息
     32 SELECT last_name,job_id,salary
     33 FROM employees
     34 WHERE job_id = (
     35     SELECT job_id
     36     FROM employees
     37     WHERE employee_id = 141
     38 ) AND salary>(
     39 
     40     SELECT salary
     41     FROM employees
     42     WHERE employee_id = 143
     43 );
     44 
     45 #案例3:返回公司工资最少的员工的last_name,job_id和salary
     46 
     47 #①查询最低工资
     48 SELECT MIN(salary)
     49 FROM employees
     50 
     51 #②查询salary=①的员工的last_name,job_id和salary
     52 SELECT last_name,job_id,salary
     53 FROM employees
     54 WHERE salary=(
     55     SELECT MIN(salary)
     56     FROM employees
     57 );
     58 
     59 #案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
     60 
     61 #①查询50号部门的最低工资
     62 SELECT MIN(salary)
     63 FROM employees
     64 WHERE department_id = 50
     65 
     66 
     67 #②查询各部门的最低工资,筛选看哪个部门的最低工资> 68 
     69 SELECT MIN(salary),department_id
     70 FROM employees
     71 GROUP BY department_id
     72 HAVING MIN(salary)>(
     73 
     74     SELECT MIN(salary)
     75     FROM employees
     76     WHERE department_id = 50
     77 );
     78 
     79 #二)多行子查询
     80 /*
     81 in:判断某字段是否在指定列表内  
     82 x in(10,30,50)
     83 
     84 any/some:判断某字段的值是否满足其中任意一个
     85 
     86 x>any(10,30,50)
     87 x>min()
     88 
     89 x=any(10,30,50)
     90 x in(10,30,50)
     91 
     92 
     93 all:判断某字段的值是否满足里面所有的
     94 
     95 x >all(10,30,50)
     96 x >max()
     97 */
     98 
     99 #案例1:返回location_id是1400或1700的部门中的所有员工姓名
    100 
    101 #①查询location_id是1400或1700的部门
    102 SELECT department_id
    103 FROM departments
    104 WHERE location_id IN(1400,1700)
    105 
    106 #②查询department_id = ①的姓名
    107 SELECT last_name
    108 FROM employees
    109 WHERE department_id IN(
    110     SELECT DISTINCT department_id
    111     FROM departments
    112     WHERE location_id IN(1400,1700)
    113 );
    114 
    115 #题目:返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
    116 
    117 #①查询job_id为‘IT_PROG’部门的工资
    118 SELECT DISTINCT salary FROM employees WHERE job_id = 'IT_PROG'
    119 
    120 #②查询其他部门的工资<任意一个①的结果
    121 
    122 SELECT employee_id,last_name,job_id,salary
    123 FROM employees
    124 WHERE salary<ANY(
    125 
    126     SELECT DISTINCT salary
    127     FROM employees
    128     WHERE job_id = 'IT_PROG'
    129 );
    130 
    131 等价于
    132 
    133 SELECT employee_id,last_name,job_id,salary
    134 FROM employees
    135 WHERE salary<(
    136 
    137     SELECT MAX(salary)
    138     FROM employees
    139     WHERE job_id = 'IT_PROG'
    140 );
    141 
    142 #案例3:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工 的员工号、姓名、job_id 以及salary
    143 
    144 #①查询job_id为‘IT_PROG’部门的工资
    145 SELECT DISTINCT salary
    146 FROM employees
    147 WHERE job_id = 'IT_PROG'
    148 
    149 #②查询其他部门的工资<所有①的结果
    150 
    151 SELECT employee_id,last_name,job_id,salary
    152 FROM employees
    153 WHERE salary<ALL(
    154 
    155     SELECT DISTINCT salary
    156     FROM employees
    157     WHERE job_id = 'IT_PROG'
    158 );
    159 
    160 等价于
    161 
    162 SELECT employee_id,last_name,job_id,salary
    163 FROM employees
    164 WHERE salary<(
    165 
    166     SELECT MIN(salary)
    167     FROM employees
    168     WHERE job_id = 'IT_PROG'
    169 );
    170 
    171 #二、放在select后面
    172 
    173 #案例;查询部门编号是50的员工个数
    174 
    175 SELECT 
    176 (
    177     SELECT COUNT(*)
    178     FROM employees
    179     WHERE department_id = 50
    180 )  个数;
    181 
    182 #三、放在from后面
    183 
    184 #案例:查询每个部门的平均工资的工资级别
    185 #①查询每个部门的平均工资
    186 
    187 SELECT AVG(salary),department_id FROM employees GROUP BY department_id
    188 
    189 #②将①和sal_grade两表连接查询
    190 
    191 SELECT dep_ag.department_id,dep_ag.ag,g.grade
    192 FROM sal_grade g
    193 JOIN (
    194 
    195     SELECT AVG(salary) ag,department_id
    196     FROM employees
    197     GROUP BY department_id
    198 
    199 ) dep_ag ON dep_ag.ag BETWEEN g.min_salary AND g.max_salary;
    200 
    201 #四、放在exists后面
    202 
    203 #案例1 :查询有无名字叫“张三丰”的员工信息
    204 SELECT EXISTS(
    205     SELECT * 
    206     FROM employees
    207     WHERE last_name = 'Abel'
    208 
    209 ) 有无Abel;
    210 
    211 #案例2:查询没有女朋友的男神信息
    212 
    213 USE girls;
    214 
    215 SELECT bo.*
    216 FROM boys bo
    217 WHERE bo.`id` NOT IN(
    218     SELECT boyfriend_id
    219     FROM beauty b
    220 )
    221 
    222 SELECT bo.*
    223 FROM boys bo
    224 WHERE NOT EXISTS(
    225     SELECT boyfriend_id
    226     FROM beauty b
    227     WHERE bo.id = b.boyfriend_id
    228 );
    View Code

      3、主查询与子查询是否相关进行分类:

       3.1 非相关子查询:不依靠主查询,能够独立运行的子查询称为“非相关子查询”。如果子查询中仅仅使用了自己定义的数据源, 这种查询是非相关子查询。 非相关子查询是独立于外部查询的子查询, 子查询总共执行一次, 执行完

    毕后将值传递给主查询。

       执行过程:① 执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。② 执行外部查询,并显示整个结果。

    1 select *
    2 from employees e
    3 where department_id in (
    4     SELECT    department_id 
    5     FROM    departments d 
    6     WHERE    d.department_id < 200
    7 )

        3.2 相关子查询:如果子查询中使用了主查询的数据源, 这种查询是相关子查询, 此时主查询的执行与相关子查询的执行相互依赖。

           执行过程:① 从外层查询中取出一个元组,将元组相关列的值传递给内层查询

                ② 执行内层查询,得到子查询操作的值

                ③ 外查询根据子查询返回的结果或结果集得到满足条件的行

                ④ 然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

    1 select *
    2 from employees e
    3 where department_id IN (
    4     SELECT    department_id 
    5     FROM    departments d 
    6     WHERE    e.department_id = d.department_id
    7 )

      4、特点:

          ① 子查询放在条件中,要求必须放在条件的右侧

          ② 子查询一般放在小括号中

          ③ 子查询的执行优先于主查询

          ④ 单行子查询对应了 单行操作符:> < >= <= = <>

            ⑤ 多行子查询对应了 多行操作符:any/some  all in 

    九、分页查询

      1、语法:

    1 select 查询列表
    2 from 表1 别名
    3 join 表2 别名
    4 on 连接条件
    5 where 筛选条件
    6 group by 分组
    7 having 分组后筛选
    8 order by 排序列表
    9 limit 起始条目索引,显示的条目数

      2、执行顺序:

    1》from子句
    2》join子句
    3》on子句
    4》where子句
    5group by子句
    6》having子句
    7》select子句
    8order by子句
    9》limit子句

      3、特点:
        ①起始条目索引如果不写,默认是0

        ②limit后面支持两个参数

          参数1:显示的起始条目索引

          参数2:条目数

       4、公式:假如要显示的页数是page,每页显示的条目数为size

        select * from employees limit (page-1)*size,size;

     1 #案例1:查询员工信息表的前5条
     2 SELECT * FROM employees LIMIT 0,5;
     3 #完全等价于
     4 SELECT * FROM employees LIMIT 5;
     5 
     6 #案例2:查询有奖金的,且工资较高的第11名到第20名
     7 SELECT 
     8     * 
     9 FROM
    10     employees 
    11 WHERE commission_pct IS NOT NULL 
    12 ORDER BY salary DESC
    13 LIMIT 10,10 
    14 
    15 #练习:查询年薪最高的前10名
    16 
    17 SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
    18 FROM employees
    19 ORDER BY 年薪 DESC
    20 LIMIT 0,10;
    View Code

    十、联合查询

      1、当查询结果来自于多张表,但多张表之间没有关联,这个时候往往使用联合查询,也称为union查询

      2、语法:
        select 查询列表 from 表1  where 筛选条件  
              union
        select 查询列表 from 表2  where 筛选条件

      3、特点:

       3.1 多条待联合的查询语句的查询列数必须一致,查询类型、字段意义最好一致

       3.2 union实现去重查询

           union all 实现全部查询,包含重复项

     1 #案例:查询所有国家的年龄>20岁的用户信息
     2 
     3 SELECT * FROM usa WHERE uage >20 UNION
     4 SELECT * FROM chinese WHERE age >20 ;
     5 
     6 #案例2:查询所有国家的用户姓名和年龄
     7 
     8 SELECT uname,uage FROM usa
     9 UNION
    10 SELECT age,`name` FROM chinese;
    11 
    12 #案例3:union自动去重/union all 可以支持重复项
    13 
    14 SELECT 1,'范冰冰' 
    15 UNION ALL
    16 SELECT 1,'范冰冰' 
    17 UNION  ALL
    18 SELECT 1,'范冰冰' 
    19 UNION  ALL
    20 SELECT 1,'范冰冰';
    View Code

    数据结构:

    /*
    SQLyog Ultimate v10.00 Beta1
    MySQL - 5.5.15 : Database - myemployees
    *********************************************************************
    */
    
    
    /*!40101 SET NAMES utf8 */;
    
    /*!40101 SET SQL_MODE=''*/;
    
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`myemployees` /*!40100 DEFAULT CHARACTER SET gb2312 */;
    
    USE `myemployees`;
    
    /*Table structure for table `departments` */
    
    DROP TABLE IF EXISTS `departments`;
    
    CREATE TABLE `departments` (
      `department_id` int(4) NOT NULL AUTO_INCREMENT,
      `department_name` varchar(3) DEFAULT NULL,
      `manager_id` int(6) DEFAULT NULL,
      `location_id` int(4) DEFAULT NULL,
      PRIMARY KEY (`department_id`),
      KEY `loc_id_fk` (`location_id`),
      CONSTRAINT `loc_id_fk` FOREIGN KEY (`location_id`) REFERENCES `locations` (`location_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=271 DEFAULT CHARSET=gb2312;
    
    /*Data for the table `departments` */
    
    insert  into `departments`(`department_id`,`department_name`,`manager_id`,`location_id`) values (10,'Adm',200,1700),(20,'Mar',201,1800),(30,'Pur',114,1700),(40,'Hum',203,2400),(50,'Shi',121,1500),(60,'IT',103,1400),(70,'Pub',204,2700),(80,'Sal',145,2500),(90,'Exe',100,1700),(100,'Fin',108,1700),(110,'Acc',205,1700),(120,'Tre',NULL,1700),(130,'Cor',NULL,1700),(140,'Con',NULL,1700),(150,'Sha',NULL,1700),(160,'Ben',NULL,1700),(170,'Man',NULL,1700),(180,'Con',NULL,1700),(190,'Con',NULL,1700),(200,'Ope',NULL,1700),(210,'IT ',NULL,1700),(220,'NOC',NULL,1700),(230,'IT ',NULL,1700),(240,'Gov',NULL,1700),(250,'Ret',NULL,1700),(260,'Rec',NULL,1700),(270,'Pay',NULL,1700);
    
    /*Table structure for table `employees` */
    
    DROP TABLE IF EXISTS `employees`;
    
    CREATE TABLE `employees` (
      `employee_id` int(6) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(20) DEFAULT NULL,
      `last_name` varchar(25) DEFAULT NULL,
      `email` varchar(25) DEFAULT NULL,
      `phone_number` varchar(20) DEFAULT NULL,
      `job_id` varchar(10) DEFAULT NULL,
      `salary` double(10,2) DEFAULT NULL,
      `commission_pct` double(4,2) DEFAULT NULL,
      `manager_id` int(6) DEFAULT NULL,
      `department_id` int(4) DEFAULT NULL,
      `hiredate` datetime DEFAULT NULL,
      PRIMARY KEY (`employee_id`),
      KEY `dept_id_fk` (`department_id`),
      KEY `job_id_fk` (`job_id`),
      CONSTRAINT `dept_id_fk` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`),
      CONSTRAINT `job_id_fk` FOREIGN KEY (`job_id`) REFERENCES `jobs` (`job_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=gb2312;
    
    /*Data for the table `employees` */
    
    insert  into `employees`(`employee_id`,`first_name`,`last_name`,`email`,`phone_number`,`job_id`,`salary`,`commission_pct`,`manager_id`,`department_id`,`hiredate`) values (100,'Steven','K_ing','SKING','515.123.4567','AD_PRES',24000.00,NULL,NULL,90,'1992-04-03 00:00:00'),(101,'Neena','Kochhar','NKOCHHAR','515.123.4568','AD_VP',17000.00,NULL,100,90,'1992-04-03 00:00:00'),(102,'Lex','De Haan','LDEHAAN','515.123.4569','AD_VP',17000.00,NULL,100,90,'1992-04-03 00:00:00'),(103,'Alexander','Hunold','AHUNOLD','590.423.4567','IT_PROG',9000.00,NULL,102,60,'1992-04-03 00:00:00'),(104,'Bruce','Ernst','BERNST','590.423.4568','IT_PROG',6000.00,NULL,103,60,'1992-04-03 00:00:00'),(105,'David','Austin','DAUSTIN','590.423.4569','IT_PROG',4800.00,NULL,103,60,'1998-03-03 00:00:00'),(106,'Valli','Pataballa','VPATABAL','590.423.4560','IT_PROG',4800.00,NULL,103,60,'1998-03-03 00:00:00'),(107,'Diana','Lorentz','DLORENTZ','590.423.5567','IT_PROG',4200.00,NULL,103,60,'1998-03-03 00:00:00'),(108,'Nancy','Greenberg','NGREENBE','515.124.4569','FI_MGR',12000.00,NULL,101,100,'1998-03-03 00:00:00'),(109,'Daniel','Faviet','DFAVIET','515.124.4169','FI_ACCOUNT',9000.00,NULL,108,100,'1998-03-03 00:00:00'),(110,'John','Chen','JCHEN','515.124.4269','FI_ACCOUNT',8200.00,NULL,108,100,'2000-09-09 00:00:00'),(111,'Ismael','Sciarra','ISCIARRA','515.124.4369','FI_ACCOUNT',7700.00,NULL,108,100,'2000-09-09 00:00:00'),(112,'Jose Manuel','Urman','JMURMAN','515.124.4469','FI_ACCOUNT',7800.00,NULL,108,100,'2000-09-09 00:00:00'),(113,'Luis','Popp','LPOPP','515.124.4567','FI_ACCOUNT',6900.00,NULL,108,100,'2000-09-09 00:00:00'),(114,'Den','Raphaely','DRAPHEAL','515.127.4561','PU_MAN',11000.00,NULL,100,30,'2000-09-09 00:00:00'),(115,'Alexander','Khoo','AKHOO','515.127.4562','PU_CLERK',3100.00,NULL,114,30,'2000-09-09 00:00:00'),(116,'Shelli','Baida','SBAIDA','515.127.4563','PU_CLERK',2900.00,NULL,114,30,'2000-09-09 00:00:00'),(117,'Sigal','Tobias','STOBIAS','515.127.4564','PU_CLERK',2800.00,NULL,114,30,'2000-09-09 00:00:00'),(118,'Guy','Himuro','GHIMURO','515.127.4565','PU_CLERK',2600.00,NULL,114,30,'2000-09-09 00:00:00'),(119,'Karen','Colmenares','KCOLMENA','515.127.4566','PU_CLERK',2500.00,NULL,114,30,'2000-09-09 00:00:00'),(120,'Matthew','Weiss','MWEISS','650.123.1234','ST_MAN',8000.00,NULL,100,50,'2004-02-06 00:00:00'),(121,'Adam','Fripp','AFRIPP','650.123.2234','ST_MAN',8200.00,NULL,100,50,'2004-02-06 00:00:00'),(122,'Payam','Kaufling','PKAUFLIN','650.123.3234','ST_MAN',7900.00,NULL,100,50,'2004-02-06 00:00:00'),(123,'Shanta','Vollman','SVOLLMAN','650.123.4234','ST_MAN',6500.00,NULL,100,50,'2004-02-06 00:00:00'),(124,'Kevin','Mourgos','KMOURGOS','650.123.5234','ST_MAN',5800.00,NULL,100,50,'2004-02-06 00:00:00'),(125,'Julia','Nayer','JNAYER','650.124.1214','ST_CLERK',3200.00,NULL,120,50,'2004-02-06 00:00:00'),(126,'Irene','Mikkilineni','IMIKKILI','650.124.1224','ST_CLERK',2700.00,NULL,120,50,'2004-02-06 00:00:00'),(127,'James','Landry','JLANDRY','650.124.1334','ST_CLERK',2400.00,NULL,120,50,'2004-02-06 00:00:00'),(128,'Steven','Markle','SMARKLE','650.124.1434','ST_CLERK',2200.00,NULL,120,50,'2004-02-06 00:00:00'),(129,'Laura','Bissot','LBISSOT','650.124.5234','ST_CLERK',3300.00,NULL,121,50,'2004-02-06 00:00:00'),(130,'Mozhe','Atkinson','MATKINSO','650.124.6234','ST_CLERK',2800.00,NULL,121,50,'2004-02-06 00:00:00'),(131,'James','Marlow','JAMRLOW','650.124.7234','ST_CLERK',2500.00,NULL,121,50,'2004-02-06 00:00:00'),(132,'TJ','Olson','TJOLSON','650.124.8234','ST_CLERK',2100.00,NULL,121,50,'2004-02-06 00:00:00'),(133,'Jason','Mallin','JMALLIN','650.127.1934','ST_CLERK',3300.00,NULL,122,50,'2004-02-06 00:00:00'),(134,'Michael','Rogers','MROGERS','650.127.1834','ST_CLERK',2900.00,NULL,122,50,'2002-12-23 00:00:00'),(135,'Ki','Gee','KGEE','650.127.1734','ST_CLERK',2400.00,NULL,122,50,'2002-12-23 00:00:00'),(136,'Hazel','Philtanker','HPHILTAN','650.127.1634','ST_CLERK',2200.00,NULL,122,50,'2002-12-23 00:00:00'),(137,'Renske','Ladwig','RLADWIG','650.121.1234','ST_CLERK',3600.00,NULL,123,50,'2002-12-23 00:00:00'),(138,'Stephen','Stiles','SSTILES','650.121.2034','ST_CLERK',3200.00,NULL,123,50,'2002-12-23 00:00:00'),(139,'John','Seo','JSEO','650.121.2019','ST_CLERK',2700.00,NULL,123,50,'2002-12-23 00:00:00'),(140,'Joshua','Patel','JPATEL','650.121.1834','ST_CLERK',2500.00,NULL,123,50,'2002-12-23 00:00:00'),(141,'Trenna','Rajs','TRAJS','650.121.8009','ST_CLERK',3500.00,NULL,124,50,'2002-12-23 00:00:00'),(142,'Curtis','Davies','CDAVIES','650.121.2994','ST_CLERK',3100.00,NULL,124,50,'2002-12-23 00:00:00'),(143,'Randall','Matos','RMATOS','650.121.2874','ST_CLERK',2600.00,NULL,124,50,'2002-12-23 00:00:00'),(144,'Peter','Vargas','PVARGAS','650.121.2004','ST_CLERK',2500.00,NULL,124,50,'2002-12-23 00:00:00'),(145,'John','Russell','JRUSSEL','011.44.1344.429268','SA_MAN',14000.00,0.40,100,80,'2002-12-23 00:00:00'),(146,'Karen','Partners','KPARTNER','011.44.1344.467268','SA_MAN',13500.00,0.30,100,80,'2002-12-23 00:00:00'),(147,'Alberto','Errazuriz','AERRAZUR','011.44.1344.429278','SA_MAN',12000.00,0.30,100,80,'2002-12-23 00:00:00'),(148,'Gerald','Cambrault','GCAMBRAU','011.44.1344.619268','SA_MAN',11000.00,0.30,100,80,'2002-12-23 00:00:00'),(149,'Eleni','Zlotkey','EZLOTKEY','011.44.1344.429018','SA_MAN',10500.00,0.20,100,80,'2002-12-23 00:00:00'),(150,'Peter','Tucker','PTUCKER','011.44.1344.129268','SA_REP',10000.00,0.30,145,80,'2014-03-05 00:00:00'),(151,'David','Bernstein','DBERNSTE','011.44.1344.345268','SA_REP',9500.00,0.25,145,80,'2014-03-05 00:00:00'),(152,'Peter','Hall','PHALL','011.44.1344.478968','SA_REP',9000.00,0.25,145,80,'2014-03-05 00:00:00'),(153,'Christopher','Olsen','COLSEN','011.44.1344.498718','SA_REP',8000.00,0.20,145,80,'2014-03-05 00:00:00'),(154,'Nanette','Cambrault','NCAMBRAU','011.44.1344.987668','SA_REP',7500.00,0.20,145,80,'2014-03-05 00:00:00'),(155,'Oliver','Tuvault','OTUVAULT','011.44.1344.486508','SA_REP',7000.00,0.15,145,80,'2014-03-05 00:00:00'),(156,'Janette','K_ing','JKING','011.44.1345.429268','SA_REP',10000.00,0.35,146,80,'2014-03-05 00:00:00'),(157,'Patrick','Sully','PSULLY','011.44.1345.929268','SA_REP',9500.00,0.35,146,80,'2014-03-05 00:00:00'),(158,'Allan','McEwen','AMCEWEN','011.44.1345.829268','SA_REP',9000.00,0.35,146,80,'2014-03-05 00:00:00'),(159,'Lindsey','Smith','LSMITH','011.44.1345.729268','SA_REP',8000.00,0.30,146,80,'2014-03-05 00:00:00'),(160,'Louise','Doran','LDORAN','011.44.1345.629268','SA_REP',7500.00,0.30,146,80,'2014-03-05 00:00:00'),(161,'Sarath','Sewall','SSEWALL','011.44.1345.529268','SA_REP',7000.00,0.25,146,80,'2014-03-05 00:00:00'),(162,'Clara','Vishney','CVISHNEY','011.44.1346.129268','SA_REP',10500.00,0.25,147,80,'2014-03-05 00:00:00'),(163,'Danielle','Greene','DGREENE','011.44.1346.229268','SA_REP',9500.00,0.15,147,80,'2014-03-05 00:00:00'),(164,'Mattea','Marvins','MMARVINS','011.44.1346.329268','SA_REP',7200.00,0.10,147,80,'2014-03-05 00:00:00'),(165,'David','Lee','DLEE','011.44.1346.529268','SA_REP',6800.00,0.10,147,80,'2014-03-05 00:00:00'),(166,'Sundar','Ande','SANDE','011.44.1346.629268','SA_REP',6400.00,0.10,147,80,'2014-03-05 00:00:00'),(167,'Amit','Banda','ABANDA','011.44.1346.729268','SA_REP',6200.00,0.10,147,80,'2014-03-05 00:00:00'),(168,'Lisa','Ozer','LOZER','011.44.1343.929268','SA_REP',11500.00,0.25,148,80,'2014-03-05 00:00:00'),(169,'Harrison','Bloom','HBLOOM','011.44.1343.829268','SA_REP',10000.00,0.20,148,80,'2014-03-05 00:00:00'),(170,'Tayler','Fox','TFOX','011.44.1343.729268','SA_REP',9600.00,0.20,148,80,'2014-03-05 00:00:00'),(171,'William','Smith','WSMITH','011.44.1343.629268','SA_REP',7400.00,0.15,148,80,'2014-03-05 00:00:00'),(172,'Elizabeth','Bates','EBATES','011.44.1343.529268','SA_REP',7300.00,0.15,148,80,'2014-03-05 00:00:00'),(173,'Sundita','Kumar','SKUMAR','011.44.1343.329268','SA_REP',6100.00,0.10,148,80,'2014-03-05 00:00:00'),(174,'Ellen','Abel','EABEL','011.44.1644.429267','SA_REP',11000.00,0.30,149,80,'2014-03-05 00:00:00'),(175,'Alyssa','Hutton','AHUTTON','011.44.1644.429266','SA_REP',8800.00,0.25,149,80,'2014-03-05 00:00:00'),(176,'Jonathon','Taylor','JTAYLOR','011.44.1644.429265','SA_REP',8600.00,0.20,149,80,'2014-03-05 00:00:00'),(177,'Jack','Livingston','JLIVINGS','011.44.1644.429264','SA_REP',8400.00,0.20,149,80,'2014-03-05 00:00:00'),(178,'Kimberely','Grant','KGRANT','011.44.1644.429263','SA_REP',7000.00,0.15,149,NULL,'2014-03-05 00:00:00'),(179,'Charles','Johnson','CJOHNSON','011.44.1644.429262','SA_REP',6200.00,0.10,149,80,'2014-03-05 00:00:00'),(180,'Winston','Taylor','WTAYLOR','650.507.9876','SH_CLERK',3200.00,NULL,120,50,'2014-03-05 00:00:00'),(181,'Jean','Fleaur','JFLEAUR','650.507.9877','SH_CLERK',3100.00,NULL,120,50,'2014-03-05 00:00:00'),(182,'Martha','Sullivan','MSULLIVA','650.507.9878','SH_CLERK',2500.00,NULL,120,50,'2014-03-05 00:00:00'),(183,'Girard','Geoni','GGEONI','650.507.9879','SH_CLERK',2800.00,NULL,120,50,'2014-03-05 00:00:00'),(184,'Nandita','Sarchand','NSARCHAN','650.509.1876','SH_CLERK',4200.00,NULL,121,50,'2014-03-05 00:00:00'),(185,'Alexis','Bull','ABULL','650.509.2876','SH_CLERK',4100.00,NULL,121,50,'2014-03-05 00:00:00'),(186,'Julia','Dellinger','JDELLING','650.509.3876','SH_CLERK',3400.00,NULL,121,50,'2014-03-05 00:00:00'),(187,'Anthony','Cabrio','ACABRIO','650.509.4876','SH_CLERK',3000.00,NULL,121,50,'2014-03-05 00:00:00'),(188,'Kelly','Chung','KCHUNG','650.505.1876','SH_CLERK',3800.00,NULL,122,50,'2014-03-05 00:00:00'),(189,'Jennifer','Dilly','JDILLY','650.505.2876','SH_CLERK',3600.00,NULL,122,50,'2014-03-05 00:00:00'),(190,'Timothy','Gates','TGATES','650.505.3876','SH_CLERK',2900.00,NULL,122,50,'2014-03-05 00:00:00'),(191,'Randall','Perkins','RPERKINS','650.505.4876','SH_CLERK',2500.00,NULL,122,50,'2014-03-05 00:00:00'),(192,'Sarah','Bell','SBELL','650.501.1876','SH_CLERK',4000.00,NULL,123,50,'2014-03-05 00:00:00'),(193,'Britney','Everett','BEVERETT','650.501.2876','SH_CLERK',3900.00,NULL,123,50,'2014-03-05 00:00:00'),(194,'Samuel','McCain','SMCCAIN','650.501.3876','SH_CLERK',3200.00,NULL,123,50,'2014-03-05 00:00:00'),(195,'Vance','Jones','VJONES','650.501.4876','SH_CLERK',2800.00,NULL,123,50,'2014-03-05 00:00:00'),(196,'Alana','Walsh','AWALSH','650.507.9811','SH_CLERK',3100.00,NULL,124,50,'2014-03-05 00:00:00'),(197,'Kevin','Feeney','KFEENEY','650.507.9822','SH_CLERK',3000.00,NULL,124,50,'2014-03-05 00:00:00'),(198,'Donald','OConnell','DOCONNEL','650.507.9833','SH_CLERK',2600.00,NULL,124,50,'2014-03-05 00:00:00'),(199,'Douglas','Grant','DGRANT','650.507.9844','SH_CLERK',2600.00,NULL,124,50,'2014-03-05 00:00:00'),(200,'Jennifer','Whalen','JWHALEN','515.123.4444','AD_ASST',4400.00,NULL,101,10,'2016-03-03 00:00:00'),(201,'Michael','Hartstein','MHARTSTE','515.123.5555','MK_MAN',13000.00,NULL,100,20,'2016-03-03 00:00:00'),(202,'Pat','Fay','PFAY','603.123.6666','MK_REP',6000.00,NULL,201,20,'2016-03-03 00:00:00'),(203,'Susan','Mavris','SMAVRIS','515.123.7777','HR_REP',6500.00,NULL,101,40,'2016-03-03 00:00:00'),(204,'Hermann','Baer','HBAER','515.123.8888','PR_REP',10000.00,NULL,101,70,'2016-03-03 00:00:00'),(205,'Shelley','Higgins','SHIGGINS','515.123.8080','AC_MGR',12000.00,NULL,101,110,'2016-03-03 00:00:00'),(206,'William','Gietz','WGIETZ','515.123.8181','AC_ACCOUNT',8300.00,NULL,205,110,'2016-03-03 00:00:00');
    
    /*Table structure for table `jobs` */
    
    DROP TABLE IF EXISTS `jobs`;
    
    CREATE TABLE `jobs` (
      `job_id` varchar(10) NOT NULL,
      `job_title` varchar(35) DEFAULT NULL,
      `min_salary` int(6) DEFAULT NULL,
      `max_salary` int(6) DEFAULT NULL,
      PRIMARY KEY (`job_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
    
    /*Data for the table `jobs` */
    
    insert  into `jobs`(`job_id`,`job_title`,`min_salary`,`max_salary`) values ('AC_ACCOUNT','Public Accountant',4200,9000),('AC_MGR','Accounting Manager',8200,16000),('AD_ASST','Administration Assistant',3000,6000),('AD_PRES','President',20000,40000),('AD_VP','Administration Vice President',15000,30000),('FI_ACCOUNT','Accountant',4200,9000),('FI_MGR','Finance Manager',8200,16000),('HR_REP','Human Resources Representative',4000,9000),('IT_PROG','Programmer',4000,10000),('MK_MAN','Marketing Manager',9000,15000),('MK_REP','Marketing Representative',4000,9000),('PR_REP','Public Relations Representative',4500,10500),('PU_CLERK','Purchasing Clerk',2500,5500),('PU_MAN','Purchasing Manager',8000,15000),('SA_MAN','Sales Manager',10000,20000),('SA_REP','Sales Representative',6000,12000),('SH_CLERK','Shipping Clerk',2500,5500),('ST_CLERK','Stock Clerk',2000,5000),('ST_MAN','Stock Manager',5500,8500);
    
    /*Table structure for table `locations` */
    
    DROP TABLE IF EXISTS `locations`;
    
    CREATE TABLE `locations` (
      `location_id` int(11) NOT NULL AUTO_INCREMENT,
      `street_address` varchar(40) DEFAULT NULL,
      `postal_code` varchar(12) DEFAULT NULL,
      `city` varchar(30) DEFAULT NULL,
      `state_province` varchar(25) DEFAULT NULL,
      `country_id` varchar(2) DEFAULT NULL,
      PRIMARY KEY (`location_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3201 DEFAULT CHARSET=gb2312;
    
    /*Data for the table `locations` */
    
    insert  into `locations`(`location_id`,`street_address`,`postal_code`,`city`,`state_province`,`country_id`) values (1000,'1297 Via Cola di Rie','00989','Roma',NULL,'IT'),(1100,'93091 Calle della Testa','10934','Venice',NULL,'IT'),(1200,'2017 Shinjuku-ku','1689','Tokyo','Tokyo Prefecture','JP'),(1300,'9450 Kamiya-cho','6823','Hiroshima',NULL,'JP'),(1400,'2014 Jabberwocky Rd','26192','Southlake','Texas','US'),(1500,'2011 Interiors Blvd','99236','South San Francisco','California','US'),(1600,'2007 Zagora St','50090','South Brunswick','New Jersey','US'),(1700,'2004 Charade Rd','98199','Seattle','Washington','US'),(1800,'147 Spadina Ave','M5V 2L7','Toronto','Ontario','CA'),(1900,'6092 Boxwood St','YSW 9T2','Whitehorse','Yukon','CA'),(2000,'40-5-12 Laogianggen','190518','Beijing',NULL,'CN'),(2100,'1298 Vileparle (E)','490231','Bombay','Maharashtra','IN'),(2200,'12-98 Victoria Street','2901','Sydney','New South Wales','AU'),(2300,'198 Clementi North','540198','Singapore',NULL,'SG'),(2400,'8204 Arthur St',NULL,'London',NULL,'UK'),(2500,'Magdalen Centre, The Oxford Science Park','OX9 9ZB','Oxford','Oxford','UK'),(2600,'9702 Chester Road','09629850293','Stretford','Manchester','UK'),(2700,'Schwanthalerstr. 7031','80925','Munich','Bavaria','DE'),(2800,'Rua Frei Caneca 1360 ','01307-002','Sao Paulo','Sao Paulo','BR'),(2900,'20 Rue des Corps-Saints','1730','Geneva','Geneve','CH'),(3000,'Murtenstrasse 921','3095','Bern','BE','CH'),(3100,'Pieter Breughelstraat 837','3029SK','Utrecht','Utrecht','NL'),(3200,'Mariano Escobedo 9991','11932','Mexico City','Distrito Federal,','MX');
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    View Code

      

      1 #一、按关系表达式筛选
      2 #案例1:查询部门编号不是100的员工信息
      3 SELECT * FROM employees WHERE department_id <> 100;
      4 
      5 #案例2:查询工资<15000的姓名、工资
      6 SELECT last_name,salary FROM employees WHERE salary<15000;
      7 
      8 #二、按逻辑表达式筛选
      9 
     10 #案例1:查询部门编号不是 50-100之间员工姓名、部门编号、邮箱
     11 #方式1:
     12 SELECT last_name,department_id,email FROM employees WHERE department_id <50 OR department_id>100;
     13 
     14 #方式2:
     15 SELECT last_name,department_id,email FROM employees WHERE NOT(department_id>=50 AND department_id<=100);
     16 
     17 #案例2:查询奖金率>0.03 或者 员工编号在60-110之间的员工信息
     18 SELECT * FROM employees WHERE commission_pct>0.03 OR (employee_id >=60 AND employee_id<=110);
     19 
     20 #三、模糊查询
     21 #1like
     22 /*
     23 功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询
     24 常见的通配符:
     25 _ 任意单个字符
     26 % 任意多个字符,支持0-多个
     27 like/not like 
     28 */
     29 #案例1:查询姓名中包含字符a的员工信息
     30 SELECT * FROM employees WHERE last_name LIKE '%a%';
     31 
     32 #案例2:查询姓名中包含最后一个字符为e的员工信息
     33 SELECT * FROM employees WHERE last_name LIKE '%e';
     34 
     35 #案例3:查询姓名中包含第一个字符为e的员工信息
     36 SELECT * FROM employees WHERE last_name LIKE 'e%';
     37 
     38 #案例4:查询姓名中包含第三个字符为x的员工信息
     39 SELECT * FROM employees WHERE last_name LIKE '__x%';
     40 
     41 #案例5:查询姓名中包含第二个字符为_的员工信息
     42 SELECT * FROM employees WHERE last_name LIKE '_\_%';
     43 
     44 SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
     45 
     46 #2in
     47 /*
     48 功能:查询某字段的值是否属于指定的列表之内
     49 
     50 a  in(常量值1,常量值2,常量值3,...)
     51 a not in(常量值1,常量值2,常量值3,...)
     52 
     53 in/not in
     54 */
     55 
     56 #案例1:查询部门编号是30/50/90的员工名、部门编号
     57 
     58 #方式1:
     59 SELECT last_name,department_id FROM employees WHERE department_id IN(30,50,90);
     60 
     61 #方式2:
     62 SELECT last_name,department_id
     63 FROM employees
     64 WHERE department_id = 30
     65 OR department_id = 50
     66 OR department_id = 90;
     67 
     68 #案例2:查询工种编号不是SH_CLERK或IT_PROG的员工信息
     69 #方式1:
     70 SELECT * FROM employees WHERE job_id NOT IN('SH_CLERK','IT_PROG');
     71 
     72 #方式2:
     73 SELECT * FROM employees WHERE NOT(job_id ='SH_CLERK' OR job_id = 'IT_PROG');
     74 
     75 #3between and
     76 /*
     77 功能:判断某个字段的值是否介于xx之间
     78 
     79 between and/not between and
     80 
     81 */
     82 #案例1:查询部门编号是30-90之间的部门编号、员工姓名
     83 
     84 #方式1:
     85 SELECT department_id,last_name FROM employees WHERE department_id BETWEEN 30 AND 90;
     86 
     87 #方式2:
     88 
     89 SELECT department_id,last_name FROM employees WHERE department_id>=30 AND department_id<=90;
     90 
     91 #案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪
     92 SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
     93 FROM employees
     94 WHERE salary*12*(1+IFNULL(commission_pct,0))<100000 OR salary*12*(1+IFNULL(commission_pct,0))>200000;
     95 
     96 SELECT last_name,salary,salary*12*(1+IFNULL(commission_pct,0)) 年薪
     97 FROM employees
     98 WHERE salary*12*(1+IFNULL(commission_pct,0)) NOT BETWEEN 100000 AND 200000;
     99 
    100 #4is null/is not null
    101 
    102 #案例1:查询没有奖金的员工信息
    103 SELECT * FROM employees WHERE commission_pct IS NULL;
    104 
    105 #案例2:查询有奖金的员工信息
    106 SELECT * FROM employees WHERE commission_pct IS NOT NULL;
    107 
    108 SELECT * FROM employees WHERE salary IS 10000;
    109 
    110 #----------------对比------------------------------------
    111 
    112 =        只能判断普通的内容
    113 
    114 IS              只能判断NULL值
    115 
    116 <=>             安全等于,既能判断普通内容,又能判断NULL值
    117 
    118 SELECT * FROM employees WHERE salary <=> 10000;
    119 
    120 SELECT * FROM employees WHERE commission_
  • 相关阅读:
    [Camtasia报错]An error occurred in the Recorde System Audio setup Failed
    [Oracle报错]RMAN-12005: error during channel cleanup/ORA-19550: cannot ...
    [Teamviewer报错]现在无法捕捉屏幕画面。这可能是由于快速的...
    [SVN技能]SVN服务迁移(Windows-Linux)
    [RabbitMQ技能]安装部署单节点RabbitMQ
    运算符的那些事
    java之连接数据库之JDBC访问数据库的基本操作
    面向对象编程之OC
    集合
    面向对象
  • 原文地址:https://www.cnblogs.com/zhufeng123/p/13836363.html
Copyright © 2020-2023  润新知