经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MySQL » 查看文章
学习笔记:MYSQL查询
来源:cnblogs  作者:夏天的风key  时间:2021/4/19 8:51:56  对本文有异议

前言:之前花费两天晚上看了一遍Mysql必知必会,没想到后面效果太差。不如跟着网课视频敲一遍和完成练习题目(练习题没写注释就不记录了),再记下笔记。

一、基本的查询select语句
语法: select 查询列表 from 表名;
查询列表可以是表中的字段、常量值、表达式、函数,查询结果是一个虚拟的表格。

  1. SELECT last_name FROM employees;
  2. #2.查询表中的多个字段
  3. SELECT first_name,last_name,phone_number,email FROM employees;
  4. #3.查询表中的所有字段
  5. SELECT * FROM employees;
  6. #4.查询常量
  7. SELECT 10;
  8. #5.查询表达式
  9. SELECT 1010*2;
  10. #6.查询函数
  11. SELECT VERSION( );
  12. #7.起别名
  13. SELECT salary AS `收入` FROM employees;
  14. SELECT first_name `名` FROM employees;
  15. #8.去重
  16. SELECT DISTINCT salary AS `工资样本` FROM employees;
  17. #9.‘+’加号:仅有运算符的作用,没有拼接字符的作用
  18. SELECT 1010 + 2023;
  19. #10.使用concat连接字段
  20. SELECT CONCAT(first_name,last_name) FROM employees;

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

分类:
1.按条件表达式筛选
运算符: > < = != <> >= <=

2.按逻辑表达式筛选
运算符: || && !
也可以使用 or and not

3.模糊查询
like
between and
in
is null

  1. #按条件表达式查询
  2. #1. 查询工资>12000的员工信息
  3. SELECT * FROM employees WHERE salary >12000;
  4. #2. 查询部门编号不等于90号的员工名和部门编号
  5. SELECT last_name,department_id FROM employees WHERE department_id !=90;
  6. #按逻辑表达式查询
  7. #3.查询工资在10000~20000的员工名、工资、奖金
  8. SELECT last_name, salary,commission_pct FROM employees WHERE salary >10000 AND salary <20000;
  9. #4.查询部门编号不是在90~100,或者工资高于15000的员工信息
  10. SELECT * FROM employees WHERE department_id <90 OR department_id >110 OR salary >15000;
  11. SELECT * FROM employees WHERE NOT(department_id BETWEEN 90 AND 110) OR salary >15000;
  12. #like查询
  13. #5.查询员工名中有a字符的员工信息
  14. SELECT * FROM employees WHERE last_name LIKE '%a%';
  15. #6.查询员工名中第三个字符为n,第五个字符为l的员工名和工资
  16. SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%';
  17. #7.查询员工名第二个字符为_的员工信息
  18. SELECT * FROM employees WHERE last_name LIKE '_\_%';
  19. SELECT * FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$';
  20. #between and 两个临界值不能调换顺序
  21. #8.查询员工编号在100~120的员工信息
  22. SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
  23. #in
  24. #9.查询员工工种是 IT_PROG,AD_VP,AD_PRSE中的一个的员工名和工种
  25. SELECT last_name, job_id FROM employees WHERE job_id IN('IT_PROG','AD_VP','AD_PRSE');
  26. #is null
  27. #10. 查询没有奖金的员工名和奖金率
  28. SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL;
  29. #安全等于
  30. SELECT last_name, commission_pct FROM employees WHERE commission_pct <=> NULL;
  31. #11. 查询有奖金的员工名和奖金率
  32. SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NOT NULL;

三、排序查询
语法:
select 查询列表 from 表名
where 筛选条件
order by 排序列表 ase | desc;

order by子句一般放在查询语句最后面,limit子句除外
order by子句支持单个字段、多个字段、表达式、别名、函数

  1. #1.查询员工信息,要求按工资从低到高排序
  2. SELECT * FROM employees
  3. ORDER BY salary ASC;
  4. #2.查询部门编号>90的员工信息,按入职时间的先后排序
  5. SELECT * FROM employees
  6. WHERE department_id >90
  7. ORDER BY hiredate ASC;
  8. #3.按年薪的高低显示员工的信息和年薪
  9. SELECT * ,salary*12 AS '年薪' FROM employees
  10. ORDER BY salary*12 ASC;
  11. #4.按姓名的长度显示员工姓名和薪水
  12. SELECT CONCAT(first_name,last_name) AS '姓名',salary FROM employees
  13. ORDER BY LENGTH(CONCAT(first_name,last_name)) ASC;
  14. #5.查询员工信息,先按工资升序排序,再按员工编号降序排序
  15. SELECT * FROM employees
  16. ORDER BY salary ASC,employee_id DESC;

四、常见函数
语法:
select 函数名(实参列表)from 表名;
分类:

  1. 单行函数
    比如:concat、length、ifnull
  2. 分组函数
  1. #(一)字符函数
  2. #1.length 获取参数值的字节个数
  3. SELECT LENGTH('中文');
  4. SELECT LENGTH('English');
  5. #2.concat 拼接字符串
  6. SELECT CONCAT(first_name,' ',last_name) FROM employees;
  7. #3.upper、lower
  8. #将姓大写、名小写,再拼接
  9. SELECT CONCAT(UPPER(first_name),' ',LOWER(last_name)) AS '姓名' FROM employees;
  10. #4.substr、substring 索引从一开始
  11. SELECT SUBSTR('一二三四五',1,4);
  12. #将名中的首字符大写,其余字符小写,再拼接起来
  13. SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) FROM employees;
  14. #5.instr 返回子串第一次出现的索引,没有则返回0
  15. SELECT INSTR('五岳泰山','泰山');
  16. #6.trim
  17. SELECT TRIM(' 23232 ');
  18. SELECT TRIM('o' FROM 'oooo中文oooo');
  19. #7. lpad 用指定的字符左填充到指定的长度
  20. SELECT LPAD('中文',9,'*');
  21. #8. Rpad 用指定的字符右填充到指定的长度
  22. SELECT RPAD('英文',10,'o');
  23. #9. replace 替换
  24. SELECT REPLACE('中文****','*','o');
  25. ##(二)数学函数
  26. #1.round 四舍五入
  27. SELECT ROUND(1.4);
  28. #2.ceil 向上取整,返回>=该参数的最小整数
  29. SELECT CEIL(1.4);
  30. #3.floor 向下取整,返回<=该参数的最大整数
  31. SELECT FLOOR(1.5);
  32. #4.truncate 截断,保留几位小数
  33. SELECT TRUNCATE(1.8888,0);
  34. #5.mod 取余
  35. SELECT MOD(34,8);
  36. ##(三)日期函数
  37. #1.now 返回当前系统日期和时间
  38. SELECT NOW();
  39. #2.curdate 返回当前系统日期,不包括时间
  40. SELECT CURDATE();
  41. #3.curtime 返回时间,不包括日期
  42. SELECT CURTIME()
  43. #4.获取指定部分,年、月、日、小时、分钟、秒
  44. SELECT YEAR(NOW());
  45. SELECT MONTH(NOW());
  46. SELECT MONTHNAME(NOW());
  47. SELECT MINUTE(NOW());
  48. #5.str_to_date 将字符通过指定的格式转换为日期
  49. SELECT STR_TO_DATE('2021-4-13','%Y-%c-%d') out_put;
  50. #查询入职日期是1992-4-3的员工
  51. SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %Y');
  52. #date_format 将日期转换成字符
  53. SELECT DATE_FORMAT(NOW(),'%Y年%c月%d日');
  54. #查询有奖金的员工名和入职日期(xx年xx月xx日)
  55. SELECT CONCAT(first_name,' ',last_name),DATE_FORMAT(hiredate,'%Y年%c月%d日') 入职日期 FROM employees
  56. WHERE commission_pct IS NOT NULL;
  57. ##(四)其它函数
  58. #1.显示mysql的版本号
  59. SELECT VERSION();
  60. #2.显示当前打开的数据库
  61. SELECT DATABASE();
  62. #3.显示当前登录的用户
  63. SELECT USER();
  64. ##(五)流程控制函数
  65. #if if else的效果
  66. SELECT IF(35>10,'大','小');
  67. SELECT CONCAT(first_name,' ',last_name),IF(commission_pct,'有奖金','没奖金') FROM employees;
  68. #case 要判断的字符或表达式
  69. #when 常量 then 要显示的值或语句
  70. #when 常量 then 要显示的值或语句
  71. #...
  72. #else 要显示的值或语句
  73. #end
  74. #查询员工的工资,要求:
  75. #部门编号为30,显示的工资为1.1倍
  76. #部门编号为40,显示的工资为1.2倍
  77. #部门编号为50,显示的工资为1.3倍
  78. #其它部门,显示的工资为1倍
  79. SELECT salary 原始工资,department_id 部门编号,
  80. CASE department_id
  81. WHEN 30 THEN salary*1.1
  82. WHEN 40 THEN salary*1.2
  83. WHEN 50 THEN salary*1.3
  84. ELSE salary
  85. END AS 新工资
  86. FROM employees;
  87. #case
  88. #when 条件1 then 要显示的值或表达式
  89. #when 条件2 then 要显示的值或表达式
  90. #when 条件3 then 要显示的值或表达式
  91. #else 要显示的值或表达式
  92. #end
  93. #查询员工的工资情况
  94. /*如果工资大于20000,显示等级A
  95. 如果工资大于15000,显示等级B
  96. 如果工资大于10000,显示等级C
  97. 否则显示等级D
  98. */
  99. SELECT salary,
  100. CASE salary
  101. WHEN salary>20000 THEN '等级A'
  102. WHEN salary>15000 THEN '等级B'
  103. WHEN salary>10000 THEN '等级C'
  104. ELSE '等级D'
  105. END AS 工资等级
  106. FROM employees;
  107. #分组函数
  108. /*功能:用作统计使用,又称为聚合函数、统计函数或组函数
  109. 分类:
  110. sum 求和、avg 平均值、max 最大值、count 计算个数
  111. */
  112. #1.简单的使用
  113. SELECT SUM(salary) FROM employees;
  114. SELECT AVG(salary) FROM employees;
  115. SELECT MAX(salary) FROM employees;
  116. SELECT MIN(salary) FROM employees;
  117. SELECT COUNT(salary) FROM employees;
  118. #2.支持哪些参数类型 sum、 avg一般用于处理数值型 max、min、count可以处理任何类型
  119. SELECT SUM(last_name) FROM employees;
  120. SELECT MAX(last_name) FROM employees;
  121. SELECT COUNT(last_name) FROM employees;
  122. #3.是否忽略null值 下面的分组函数都忽略null值
  123. SELECT MAX(commission_pct),SUM(commission_pct),AVG(commission_pct) FROM employees;
  124. SELECT COUNT(employee_id),COUNT(commission_pct) FROM employees;
  125. #4.和distinct搭配使用
  126. SELECT SUM(DISTINCT(salary)) FROM employees;
  127. SELECT SUM(salary) FROM employees;
  128. #5.count 函数的详细介绍
  129. /*效率:
  130. MYISAM引擎下,count(*)效率高
  131. INNODB引擎下,count(*)和count(1)效率差不多,比count(字段)效率高
  132. */
  133. SELECT COUNT(salary) FROM employees;
  134. SELECT COUNT(*) FROM employees;
  135. SELECT COUNT(1) FROM employees;
  136. #6.和分组函数一同查询的字段的限制:要求是group by后面的字段
  137. SELECT SUM(salary),employee_id FROM employees;

五、分组查询
语法:
select 分组函数、列(要求是出现在group by后面的字段)
from 表名
where 筛选条件
group by 分组的列表
order by 子句

注意:查询列表必须特殊,要求是分组函数和group by后面的字段

分组查询中的筛选条件分为两类:
分组前筛选 数据源是原始表 位置在group by前面 关键字是where
分组后筛选 分组后的结果集 在group by后面 having
分组函数作为筛选条件的,肯定放在having子句中。

group by子句支持单个字段分组、多个字段分组、表达式或函数,也可以添加排序

  1. #分组查询
  2. #1.查询每个工种的最高工资
  3. SELECT MAX(salary),job_id FROM employees
  4. GROUP BY job_id;
  5. #2.查询每个位置上的部门个数
  6. SELECT COUNT(*),location_id FROM departments
  7. GROUP BY location_id;
  8. #3.添加筛选条件:查询邮箱中包含a字符的,每个部门的平均工资
  9. SELECT AVG(salary),department_id FROM employees
  10. WHERE email LIKE '%a%'
  11. GROUP BY department_id;
  12. #4.查询有奖金的每个领导手下员工的最高工资
  13. SELECT MAX(salary),manager_id FROM employees
  14. WHERE commission_pct IS NOT NULL
  15. GROUP BY manager_id;
  16. #添加复杂的筛选条件
  17. #5.查询哪个部门的员工个数>2
  18. #查询每个部门的员工个数
  19. SELECT COUNT(*),department_id FROM employees GROUP BY department_id;
  20. #根据上面的结果筛选,查询哪个部门的员工个数>2
  21. SELECT COUNT(*),department_id FROM employees GROUP BY department_id
  22. HAVING COUNT(*) >2;
  23. #6.查询每个工种有奖金员工的最高工资>12000的工种编号和最高工资
  24. SELECT MAX(salary),job_id FROM employees
  25. GROUP BY job_id
  26. HAVING MAX(salary) >12000;
  27. #7.查询领导编号>102的每个领导手下的最低工资>5000的领导编号是哪个,以及其最低工资
  28. SELECT manager_id,MIN(salary) FROM employees
  29. WHERE manager_id >102
  30. GROUP BY manager_id
  31. HAVING MIN(salary) >5000;
  32. #按表达式或函数分组
  33. #8.按员工名字的长度,查询每一组员工个数,筛选员工个数>5的有哪些
  34. SELECT COUNT(*),LENGTH(last_name) FROM employees
  35. GROUP BY LENGTH(last_name)
  36. HAVING COUNT(*) >5;
  37. #按多个字段分组
  38. #9.查询每个部门每个工种的员工的平均工资
  39. SELECT AVG(salary),department_id,job_id FROM employees
  40. GROUP BY department_id,job_id;
  41. #添加排序
  42. #10.查询每个部门每个工种的员工的平均工资,按平均工资的高低排序
  43. SELECT AVG(salary),department_id,job_id FROM employees
  44. GROUP BY department_id,job_id
  45. HAVING AVG(salary) >10000
  46. ORDER BY AVG(salary) ASC;

六、多表查询
按标准分类:
sql92:仅支持内连接, sql99

按功能分类:
内连接 自连接 外连接

sql99语法:

select 查询列表
from 表名 连接类型
join 表名
on 连接条件
where 筛选条件
group by 分组条件
having 筛选条件
order by 筛选条件

分类:
内连接: inner
外连接: 左外连接 left outer, 右外连接 right outer, 全外 full outer
交叉连接:cross join

(1)内连接:
语法:select 查询列表
from 表名
inner join 表名
on 连接条件

分类:等值连接 非等值连接 自连接

(2)外连接:
应用场景:用于查询一个表中有,另外一个表中没有的记录。

特点:
外连接的查询结果为主表中的所有记录,
如果从表中有与它匹配的,则显示匹配的值,
从表中没有与它匹配的,则显示null值

外连接查询结果=内连接结果+主表中有而从表中没有的记录
左外连接,left join左边的是主表
右外连接,right join右边的是主表
全外连接=内连接结果+主表中有而从表中没有的记录+从表中有而主表中没有的记录

  1. ##自连接
  2. #一、内连接
  3. #等值连接
  4. #1.查询员工名、部门名
  5. SELECT last_name,department_name
  6. FROM employees e
  7. INNER JOIN departments d
  8. ON e.department_id = d.department_id;
  9. #2.查询员工名包含e的员工名和工种名(添加筛选)
  10. SELECT last_name,job_title
  11. FROM employees e
  12. INNER JOIN jobs j
  13. ON e.`job_id`= j.`job_id`
  14. WHERE e.last_name LIKE '%e%';
  15. #3.查询部门个数>3的城市名和部门个数(添加分组和筛选)
  16. SELECT COUNT(*),city
  17. FROM departments d
  18. INNER JOIN locations l
  19. ON d.location_id = l.location_id
  20. GROUP BY city
  21. HAVING COUNT(*) >3;
  22. #4.查询那个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
  23. SELECT COUNT(*),department_name
  24. FROM employees e
  25. INNER JOIN departments d
  26. ON e.`department_id` = d.`department_id`
  27. GROUP BY department_name
  28. HAVING COUNT(*) >3
  29. ORDER BY COUNT(*) DESC;
  30. #5.查询员工名、部门名、工种名,并按部门名降序
  31. SELECT last_name,department_name,job_title
  32. FROM employees e
  33. INNER JOIN departments d ON e.department_id = d.department_id
  34. INNER JOIN jobs j ON e.job_id = j.job_id
  35. ORDER BY department_name DESC;
  36. ##非等值连接
  37. #6.查询员工的工资级别
  38. SELECT last_name,salary,grade_level FROM employees e
  39. INNER JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal;
  40. #7.查询工资级别的个数>20的个数,并按工资级别降序
  41. SELECT COUNT(*),grade_level FROM employees e
  42. INNER JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal
  43. GROUP BY j.grade_level
  44. HAVING COUNT(*) >20
  45. ORDER BY j.grade_level DESC;
  46. ##自连接
  47. #8.查询员工的名字、上级的名字
  48. SELECT e.last_name 员工名,m.last_name 上级 FROM employees e
  49. INNER JOIN employees m ON e.manager_id = m.employee_id;
  50. #9.查询员工的名字中包含字符k、上级的名字
  51. SELECT e.last_name 员工名,m.last_name 上级 FROM employees e
  52. INNER JOIN employees m ON e.manager_id = m.employee_id
  53. WHERE e.last_name LIKE '%k%';
  54. #二、外连接
  55. #左外连接
  56. #1.查询没有男朋友的女神
  57. SELECT be.name,b.boyname FROM beauty be
  58. LEFT OUTER JOIN boys b ON be.boyfriend_id = b.id
  59. WHERE b.id IS NULL;
  60. #2.查询哪个部门没有员工
  61. SELECT department_name,employee_id FROM departments d
  62. LEFT OUTER JOIN employees e ON d.department_id = e.department_id;
  63. WHERE d.department_id IS NULL;
  64. #右外连接
  65. SELECT department_name FROM employees e
  66. RIGHT OUTER JOIN departments d ON d.department_id = e.department_id;
  67. #全外 mysql中不支持
  68. SELECT be.*,bo.* FROM beauty be
  69. FULL OUTER JOIN boys bo ON be.boyfriend_id = bo.id;
  70. #交叉连接
  71. SELECT be.*,bo.* FROM beauty be
  72. CROSS JOIN boys bo ;

七、子查询
含义:出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询

分类:
按子查询出现的位置:
select 后面:仅支持标量子查询;
from后面: 支持表子查询;
where或having后面:标量子查询或列子查询、行子查询;
exist后面:相关子查询

按结果集的行列数不同划分:
标量子查询(结果集为一行一列)
行子查询(一行多列)
列子查询(一列多行)
表子查询(多行多列)

  1. #一、where或having后面
  2. /*
  3. 支持标量子查询或列子查询、行子查询
  4. 特点:
  5. 子查询一般放在括号内
  6. 子查询一般放在条件的右侧
  7. 标量子查询:一般搭配单行操作符使用(> < =)
  8. 列子查询:一般搭配着多行操作符使用(in any/some or)
  9. */
  10. ##标量子查询
  11. #1.谁的工资比Abel高?
  12. SELECT salary FROM employees
  13. WHERE last_name = 'Abel';
  14. SELECT last_name,salary FROM employees
  15. WHERE salary >(
  16. SELECT salary FROM employees
  17. WHERE last_name = 'Abel');
  18. #2.查询job_id 与141号员工相同,salary比143号多的员工姓名、job_id和工资
  19. SELECT job_id FROM employees
  20. WHERE employee_id = 141;
  21. SELECT salary FROM employees
  22. WHERE employee_id = 143;
  23. SELECT last_name,job_id,salary FROM employees
  24. WHERE job_id = (
  25. SELECT job_id FROM employees
  26. WHERE employee_id = 141)
  27. AND salary > (
  28. SELECT salary FROM employees
  29. WHERE employee_id = 143);
  30. #3.返回工资最少的员工的姓名、job_id和salary
  31. SELECT MIN(salary) FROM employees;
  32. SELECT last_name,job_id,salary FROM employees
  33. WHERE salary = (SELECT MIN(salary) FROM employees);
  34. #having
  35. ##4.查询最低工资大于50号部门的最低工资的部门id和其最低工资
  36. SELECT MIN(salary),department_id FROM employees
  37. GROUP BY department_id
  38. HAVING department_id = 50;
  39. SELECT MIN(salary),department_id FROM employees
  40. GROUP BY department_id
  41. HAVING MIN(salary) > (
  42. SELECT MIN(salary) FROM employees
  43. GROUP BY department_id
  44. HAVING department_id = 50);
  45. #行子查询
  46. #5.查询员工编号最小且工资最高的员工信息
  47. SELECT MIN(employee_id) FROM employees;
  48. SELECT MAX(salary) FROM employees;
  49. SELECT * FROM employees
  50. WHERE employee_id = (SELECT MIN(employee_id) FROM employees)
  51. AND salary = (SELECT MAX(salary) FROM employees);
  52. SELECT * FROM employees
  53. WHERE (employee_id,salary) =(SELECT MIN(employee_id), MAX(salary) FROM employees);
  54. #二、select后面:仅支持标量子查询)
  55. #6.查询每个部门的员工个数
  56. SELECT COUNT(*),department_name FROM departments d
  57. LEFT OUTER JOIN employees e ON d.department_id = e.department_id
  58. GROUP BY department_name;
  59. SELECT d.*,(
  60. SELECT COUNT(*) FROM employees e
  61. WHERE e.department_id = d.department_id)
  62. FROM departments d;
  63. #7.查询员工号位为102的部门名
  64. SELECT department_name FROM employees e
  65. INNER JOIN departments d ON e.department_id = d.department_id
  66. WHERE employee_id = 102;
  67. #三、from后面:列子查询,将子查询的结果当做一张表,要求必须取别名
  68. #8.查询每个部门的平均工资的工资等级
  69. /* 可能错误 */
  70. SELECT AVG(salary),department_id,grade_level FROM employees e
  71. INNER JOIN job_grades ON salary BETWEEN lowest_sal AND highest_sal
  72. GROUP BY department_id;
  73. SELECT ag.*, grade_level
  74. FROM (
  75. SELECT AVG(salary) s,department_id FROM employees
  76. GROUP BY department_id) ag
  77. INNER JOIN job_grades ON ag.s BETWEEN lowest_sal AND highest_sal;
  78. #四、exist后面
  79. /*语法:
  80. exist(完整的查询语句)
  81. 结果:1或0
  82. */
  83. #9. 查询有员工的部门名
  84. SELECT department_name FROM departments d
  85. WHERE EXISTS(
  86. SELECT * FROM employees e
  87. WHERE e.department_id = d.department_id);
  88. SELECT department_name FROM departments d
  89. INNER JOIN employees e ON d.department_id = e.department_id;

八、分页查询
要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表名
inner join 表名 on 连接条件
where 筛选条件
group by 分组条件
having 分组后的筛选
order by 排序的字段
limit offset,size

offset 要显示条目的起始索引(起始索引从零开始)
size 要显示的条目数

注意:limit放在查询语句的最后
公式:要显示的页数 limit (page-1)*size,size

  1. #分页查询
  2. #查询前五条员工信息
  3. SELECT * FROM employees LIMIT 0,5;
  4. #2.查询第11-25条员工信息
  5. SELECT * FROM employees LIMIT 10,15;
  6. #3.有奖金的员工信息,并且将工资较高的前10条显示出来
  7. SELECT * FROM employees WHERE commission_pct IS NOT NULL
  8. ORDER BY salary
  9. LIMIT 0,10;

九、联合查询
union 将多条查询语句的结果合并成一个结果
语法:
查询语句1
union
查询语句2
union
...
应用场景:查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时
特点: 要求多个查询语句的查询列表是一致的
多个查询语句的查询的每一列的类型和顺序最好是一致的
union关键字默认去重,如果使用union all可以包含重复项

  1. #联合查询
  2. #查询部门编号>90或邮箱包含a的员工信息
  3. SELECT * FROM employees WHERE department_id > 90
  4. UNION
  5. SELECT * FROM employees WHERE email LIKE '%a%';

原文链接:http://www.cnblogs.com/echoxiatiandefeng/p/14619994.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号