MySQL数据库基础知识 1 DQL语言笔记

一、 MySQL基础命令

1.查看当前的数据库
show databases;
2.打开指定的库
use 库名
3.查看当前库的所有表
show tables;
4.查看其它库的所有表
show tables from 库名;
5.创建表
create table 表名(
列名 列类型,
列名 列类型,

);
6.查看表结构
desc 表名;
7.查看服务器的版本
方式一:登录到MySQL服务端
select version();
方式二:直接命令(没有登录到MySQL服务端)
MySQL --version 或 MySQL --V
7.注释
单行注释:#注释文字
单行注释:-- (空格)注释文字
多行注释:/* 注释文字 */

二、基础查询(DQL语言)

语法:
select 查询列表 from 表名;
特点:
1.查询列表可以是:表中的字段、常量值、表达式、函数
1.1 查询字段:select 字段名 from 表名
查询常量值:select 100;(常量值)
查询表达式:select 100*15;
查询函数:select VERSION();
2.查询的结果是一个虚拟的表格

查询多个字段时:查询列表用逗号分隔开,不同的表时表名也用逗号分隔开
select * from 查询的表中为所有的字段

3.起别名:
方式一:使用 AS
方式二:使用空格
注意:当使用别名中有特殊字符时(如空格,#)加单或者双引号括起来
4.去重:
在 select 查询列表 from 表名 语句的查询列表前加 DISTINCT
5.连接:
MySQL中的加号:仅仅有一个功能运算符
select 100+90:两个操作数都为数值型,则做加法运算
select ‘123’ +60:只要其中一个为字符型,则试图将字符型转换为数值型
如果转换成功,则继续做加法运算
select ‘fjjjj’ + 60:如果转换失败,则将字符型数值转换成0
select null +10:只要其中一个为null,则结果为null
综上所述:连接时不能用加号,所有连接时要用一个函数:concat()
6.判断查询列表中是否有null,如果有并用其它字符代替
IFNULL(str1,str2):str1:要判断的列表 str2: 替代的字符
注意事项
1.查询之前要先打开相应的库
2.着重号(`)用来和关键字区分
3.可以选中某个区域执行和格式化

进阶1:条件查询

语法:

 select
        查询列表
 from   
        表名
 where
        选择的条件;

分类:
1、按条件表达式筛选:条件运算符:> < =(是否等于) != (不等于)或者<> >= <=
2、按逻辑表达式筛选:逻辑运算符(用于连接条件表达式): and(&&) or(||) 非(!)
3、模糊查询:like between and(两个一起) in is null(两个一起)或者is not null

like特点:一般和通配符搭配使用,通配符:%任意多个字符包含0个字符(%%条件查询时,列表中如果有null,查询结果可能不一样),(下划线)任意单个字符。注:当模糊查询时要求查询条件中有(下划线),用转义字符解决,例如:员工名中第二个为_(下划线)

 `SELECT  
	`last_name`  
FROM
	employees
WHERE	
	last_name LIKE '_\_%';`
或者用ESCAPE关键字:
`WHERE	
	last_name LIKE '_a_%' ESCAPE 'a';`#这里的a可以是任意字符

between …(1)and…(2)特点:左右都是闭区间,(1)、(2)不能颠倒,(1)小(2)大

in特点:判断某字段的值是否属于in列表中的某一项,特点为:1、比使用or更加简洁;2、in列表的类型要一致

is null特点:=或者<>不能用于判断null的值,而is null 或者 is not null 可以判断是否为null值

进阶2:排序查询

语法:

select    查询列表
from     表名
[where 筛选条件]
order  by 排序列表  [asc(升序默认)   或者 desc(降序)]

order by 子句可以支持单个字段、多个字段、表达式、函数、别名
order by子句一般是放在查询语句的最后面,单limit 子句除外
几个排序举例:

#按别名排序
SELECT
	*,salary*12*(1+IFNULL(`commission_pct`,0)) AS 年薪
FROM 
	`employees`
ORDER BY
	salary*12*(1+IFNULL(`commission_pct`,0)) DESC;
#按字符长度排序【按函数排序】
SELECT  LENGTH(last_name) AS 字节长度,last_name,salary
FROM `employees`
ORDER BY LENGTH(last_name) DESC;#这里也可也是别名
#多个排序条件
SELECT *
FROM `employees`
ORDER BY `salary`ASC ,`employee_id` DESC;

进阶3:常见函数:

调用:select 函数名(参数列表)【from 表名】(当函数用到表时才用到from)
分类:1、单行函数:如:concat()、length()(统计的是字符个数)、ifnull()等
字符函数使用举例:
upper(str):使str变成大写字母;lower(str1):str1变成小写字母:

#将姓变成大写,名变小写,然后拼接
SELECT CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名
FROM `employees`;
#字符截取函数:substr 或者substring
#截取从指定索引处后面所有字符,索引从1开始
SELECT SUBSTR('李莫愁爱上了陆展元',7) AS out_put;
#截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3) AS 结果;
#返回字串第一次出现的索引:instr,没找到则返回0
SELECT INSTR('李莫愁陆展元爱上了陆展元','陆展元') AS 结果;

去掉前后字符函数:trim(str1 from str2):以str1去掉str2中的前后字符
如:SELECT TRIM('a'FROM 'aaaaa沈aa张三aaaaaaa')

#用指定的字符实现左填充:lpad
SELECT LPAD('小李飞刀',8,'*')
#用指定的字符实现右填充:rpad
SELECT RPAD('小李飞刀',8,'*')
#替换replace,找不到替换的内容则直接输出
SELECT REPLACE('他真有钱','他','我')

总结如下:
在这里插入图片描述

数学函数使用举例:
四舍五入函数:round()可重载为round(数1,数2):数2为数1要保留几位再进行四舍五入。
向上和向下取整函数:ceil():返回>=该参数的最小整数、floor()返回<=该参数的最大整数
截断函数:truncate(数1,数2):数2为数1截取之后保留几位
取模函数:mod(数1,数2):结果正负看数1.
日期函数使用举例
返回当前系统日期+时间:now()
返回当前系统日期不包括时间:curdate()
返回当前系统时间不包括日期:curtime()
获取指定的年、月、日、小时、分钟、秒:select 函数名():函数名为对应的年月日之类的英文单词:如year、month等,如:SELECT YEAR(NOW()) AS 年;
将日期格式的字符转化成指定格式的日期:str_to_date()
如:STR_TO_DATE('9-13-1999','%m-%d-%Y') 1 999-09-13 将日期转换成对应的字符:date_format()
如:DATE_FORMAT(‘2018/6/6’,‘%Y年%m月%d日’) 2018年06月06日
在这里插入图片描述
流程控制函数使用举例及语法
语法:
case 要判断的字段或者表达式 when 常量1 then 要显示的值1或语句1; when 常量2 then 要显示的值2或语句2; ........ else 要显示的值n或者语句n; end
举例:

/*查询员工的工资,要求
部门号=30,显示工资为1.1倍
部门号=40,显示工资为1.2倍
部门号=50,显示工资为1.3倍
其它部门,显示原工资*/
SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;

多条判断语句时(类似于多条if语句):
语法:

case 
when  条件1 then 要现实的值1或者语句1
when  条件2 then 要显示的值2或者语句2
.......
else   要显示的值n或者语句n
end

举例:

/*查询员工的工资情况
工资>20000,显示A级别
工资>15000,显示B级别
工资>10000,显示C级别
否则,显示D级别*/
SELECT salary,
CASE 
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工资等级
FROM employees;插入代码片

2、分组函数:功能:做统计使用,又称统计函数、聚合函数、组函数
简单类分组函数:sum(),avg(),max(),min(),count():计数
特点:1、sum()、avg()、count():一般用于数值型,datediff():计算两个日期相差的天数
2、以上分组函数都忽略null值
3、可以和distinct搭配使用实现去重运算
count(*)函数的单独介绍:一般用于统计行数
注意:和分组函数一同查询的字段要求是group by后的字段,不是则有限制
如:

SELECT AVG(salary),`employee_id` FROM employees;//不报错,但产生错误输出

进阶4:分组查询:

语法:

select  分组函数  列(要求出现在group by后出现的字段)
from    表
【where 筛选条件】
group by  分组的列表
【order by 子句】

注意:查询列表比较特殊,要求是分组函数和group by 出现后的字段
简单分组查询举例:

#案例1:查询每个工种的最高工资
SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id;

#案例2:查询每个位置上的部门个数
SELECT COUNT(*),location_id
FROM `departments`
GROUP BY location_id;代码片

添加分组前的筛选条件

#添加筛选条件
#案例1:查询邮箱中包含a字符的每个部门的平均工资
SELECT ROUND(AVG(salary),2),department_id
FROM employees
WHERE `email` LIKE '%a%'
GROUP BY department_id;
#案例2:查询有奖金的每个领导手下员工的最高工资
SELECT MAX(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY `manager_id`;

添加分组后的筛选条件

#案例1:查询那个部门的员工个数>2
#第一步:查询每个部门的员工个数
SELECT COUNT(*),`department_id`
FROM employees
GROUP BY department_id
#第二步:根据第一步的结果进行选择
HAVING COUNT(*)>2;

#案例2:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
#第一步:查询每个工种有奖金的员工的最高工资
SELECT `job_id`,MAX(salary)
FROM `employees`
WHERE `commission_pct` IS NOT NULL
GROUP BY `job_id`
#第二步:查询工资>12000的工种编号和最高工资
HAVING MAX(salary) > 12000;

#案例3:查询领导编号>102的每个领导手下的最低工资>5000的领导的领导编号是多少,以及最低工资
SELECT `manager_id`,MIN(salary)
FROM `employees`
WHERE `manager_id`>102
GROUP BY `manager_id`
HAVING MIN(salary)>5000;

以上两种筛选的总结:
在这里插入图片描述
补充:1、分组函数做条件肯定是放在having子句中
2、能用分组前筛选的,就优先考虑使用分组前筛选
3、group by子句支持单个字段分组和多个字段分组(多个字段之间用逗号隔开,不分先后顺序),也支持函数或者表达式(用的较少)
4、也可以添加排序(排序放在整个分组查询的最后)
group by子句后面按表达式或者函数分组

#案例:按员工姓名长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些
SELECT LENGTH(`last_name`),COUNT(*)
FROM employees
GROUP BY LENGTH(`last_name`)
HAVING COUNT(*)>5

添加排序条件进行查询

#案例:查询每个部门每个工种的员工的平均工资,并且按平均工资的高低显示
SELECT department_id,job_id,AVG(salary)
FROM`employees`
WHERE department_id IS NOT NULL
GROUP BY department_id,job_id
HAVING AVG(salary)>10000
ORDER BY AVG(salary) DESC;

进阶5:sq192连接查询语法

含义:又称多表查询,当查询的字段来自多个表时,就会用到连接查询
注意避免笛卡尔乘积现象:表1 有m行,表2 有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
分类:
按年代分:sq192标准:仅仅支持内连接、sq199标准【推荐】:仅仅不支持全外连接
按功能分:内连接:等值连接,非等值连接,自连接
外连接:左外连接,右外连接,全外连接
交叉连接

#案例1:查询员工名和对应的部门名
SELECT `last_name`,`department_name`
FROM `departments`,`employees`
WHERE `departments`.`department_id`=`employees`.`department_id`;

#案例2:查询员工名、工种号、公种名
#添加给表起别名的语法
SELECT `last_name`,`job_title`,e.`job_id`
FROM `employees` AS e,`jobs` AS j #这里起别名之后,select后就得用别名,否则报错,因为是先执行这里 
WHERE e.`job_id` = j.`job_id`;

起别名的好处及注意事项:1、提高语句的简洁度,2、区分多个重名的字段
注意:如果为表起别名,则查询的字段就不能用原来的表名去限定

等值连接

#加入筛选语法
#案例1:查询有奖金的员工名、部门名
SELECT `last_name`,`department_name`
FROM `departments` AS d,`employees`AS e
WHERE d.`department_id` = e.`department_id`
AND `commission_pct` IS NOT NULL;

#案例2:查询城市名中第二个字符为o的部门名和城市名
SELECT `city`,`department_name`
FROM `departments` AS d,`locations` AS l
WHERE d.`location_id` = l.`location_id`
AND city LIKE '_o%';

#加入分组的语法
#案例1:查询每个城市的部门个数
SELECT COUNT(*),`city`,`department_name`
FROM `departments` AS d,`locations` AS l
WHERE d.`location_id` = l.`location_id`
GROUP BY city;

#案例2:查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
SELECT `department_name`,d.`manager_id`,MIN(salary)
FROM `departments` AS d,`employees`AS e
WHERE d.`department_id` = e.`department_id`
AND `commission_pct` IS NOT NULL
GROUP BY `department_name`,`manager_id`;

#加入排序的语法
#案例:查询每个工种的工种名和员工的个数,并且按员工个数降序
SELECT `job_title`,COUNT(*)
FROM `jobs` AS j,`employees` AS e
WHERE j.`job_id` = e.`job_id`
GROUP BY job_title
ORDER BY COUNT(*) DESC;

#三表连接
#案例:查询员工名、部门名和所在的城市
SELECT `last_name`,`department_name`,`city`
FROM departments AS d,employees AS e,locations AS l
WHERE e.`department_id` = d.`department_id`
AND d.`location_id` = l.`location_id`
#加筛选
AND city LIKE 's%'
#加排序
ORDER BY salary;

等值连接总结
1、等值连接的结果为多表的交集部分
2、n表连接,至少需要n-1个连接条件
3、多表没有顺序要求
4、一般需要为表起别名
5、可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

非等值连接

#案例:查询员工的工资和工资级别
SELECT salary,grade_level
FROM `employees` AS e,job_grade AS g
WHERE salary BETWEEN g.lowest_sal AND g.highest_sal
#加入筛选
AND g.grade_level = 'A';

自连接

#案例:查询 员工名和上级的名称
SELECT e.`employee_id`,e.`last_name`,m.`employee_id`,m.`last_name`
FROM `employees` AS e,`employees` AS m #e代表员工表,m代表领导表
WHERE e.`manager_id` = m.`employee_id`;

进阶六 sq199连接语法

语法:

select 查询列表
        from1    别名 【连接类型】
        join2    别名
        on        连接条件
        【where 筛选条 件】
        【group by 分组】
        【having 筛选条件】
        【order by  排序列表】

连接类型:
内连接:inner(可以省略)
外连接:左外:left【outer】 右外:right【outer】 全外:full【outer】
交叉连接:cross join(实现笛卡尔乘积)
内连接之等值连接

#案例1:查询员工名、部门名
SELECT `last_name`,`department_name`
FROM `employees` AS e
INNER JOIN `departments` AS d
ON e.`department_id` = d.`department_id`;

#案例2:查询员工名字中包含a的员工名和工种名(添加筛选)
SELECT `last_name`,`job_title`
FROM `employees` AS e
INNER JOIN `jobs` AS j
ON e.`job_id` = j.`job_id`
WHERE last_name LIKE "%a%";

#案例3:查询每个部门数>3的城市名和部门个数,(分组加筛选)
SELECT  `city`,`department_id`,COUNT(*)
FROM `locations` AS l
INNER JOIN `departments` AS d
ON l.`location_id` = d.`location_id`
GROUP BY `city`
HAVING COUNT(*)>3;

#案例4:查询哪个部门的员工个数>3的部门名和员工个数,并按个数降序(添加排序)
SELECT `department_name`,COUNT(*)
FROM `departments` AS d
INNER JOIN `employees` AS e
ON d.`department_id` = e.`department_id`
GROUP BY `department_name`
HAVING COUNT(*)>3
ORDER BY COUNT(*) DESC;

#案例5:查询员工名、部门名、工种名,并按部门名降序(三表连接)
SELECT `last_name`,`department_name`,`job_title`
FROM `employees` AS e
INNER JOIN `departments` AS d ON e.`department_id` = d.`department_id`
INNER JOIN `jobs` AS j ON e.`job_id` = j.`job_id`
ORDER BY departmen t_name DESC;

内连接之非等值连接

#案例1:查询员工的工资等级
SELECT salary,grade_level
FROM employees AS e
INNER JOIN job_grade AS g
ON e.`salary` BETWEEN lowest_sal AND highest_sal;

#案例2:查询工资级别的个数>20的个数,并且按工资级别降序
SELECT salary,grade_level,COUNT(*)
FROM employees AS e
INNER JOIN job_grade AS g
ON e.`salary` BETWEEN g.lowest_sal AND highest_sal;
GROUP BY grade_level
HAVING COUNT(*)>20
ORDER BY grade_level DESC;

内连接之自连接

#查询姓名中包含字符k的员工的名字、上级的名字
SELECT e.`last_name`,m.`last_name`
FROM `employees` AS e
INNER JOIN `employees` AS m
ON e.`manager_id` = m.`employee_id`
WHERE e.`last_name` LIKE "%k%";

外连接:
应用场景:用于查询一个表中有,另一个表没有记录
特点:
1、外连接的查询结果为主表中的所有记录:如果从表中有和它匹配的,则显示匹配的值,如果从表中没有和它匹配的,则显示null,外连接的查询结果=内连接结果+主表有而从表没有的记录
2、左外连接,left join 左边的是主表,右外连接,right join 右边的主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
外连接之左外连接

#查询哪个部门没有员工
SELECT d.*,e.`employee_id`
FROM `departments` AS d
LEFT OUTER JOIN `employees` AS e
ON d.`department_id` =e.`department_id`
WHERE e.`employee_id` IS NULL;

外连接之右外连接

#查询哪个部门没有员工
SELECT d.*,e.`employee_id`
FROM `employees` AS e
RIGHT OUTER JOIN `departments` AS d
ON d.`department_id` =e.`department_id`
WHERE e.`employee_id` IS NULL;

进阶7:子查询

7.1含义:出现在其他语句中的select语句,称为子查询或者内查询
外部的查询语句,称为主查询或者外查询
7.2分类:
按查询语句出现的位置:select后面:仅仅支持标量子查询;from后面:支持表子查询
where或者having后面:标量子查询(单行查询),列子查询(多行查询),行子查询(只作了解)
exists后面(相关子查询):表子查询
按结果集的行列数不同:标量子查询(结果集只有一行一列),表子查询(查询结果一般为多行多列),列子查询(结果集只有一列多行),行子查询(结果集一般有一行多列)
7.3 where或者having查询的特点
1、子查询放在小括号内
2、子查询一般放在条件的右侧
3、标量子查询,一般搭配着单行操作符使用,操作符(关系运算符):> < >= <= =
4、列子查询一般搭配着多行操作符使用,in、any/some、all
5、子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
7.4 where 或者having 接标量子查询案例举例:

#案例1:谁的工资比Abel高?
SELECT *
FROM  `employees`
WHERE `salary`>(
#查询Abel的工资
	SELECT salary
	FROM `employees`
	WHERE last_name = 'Abel'
);

#案例2:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id,和工资
SELECT `last_name`,`job_id`,`salary`
FROM `employees`
WHERE `job_id` = (
#查询141号的job_id
	SELECT `job_id`
	FROM `employees`
	WHERE `employee_id` = 141
)
AND salary > (
#查询143号的员工的工资的salary
	SELECT  `salary`
	FROM `employees`
	WHERE `employee_id` = 143
);

#案例3:返回公司工资最少的员工的last_name,job_id和salary
SELECT `last_name`,`job_id`,`salary`
FROM `employees`
WHERE salary = (
	SELECT MIN(salary)
	FROM `employees`
); 

#案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资 
SELECT `department_id`,MIN(salary)
FROM `employees`
GROUP BY `department_id`
HAVING MIN(salary) > (
	SELECT MIN(salary)
	FROM `employees`
	WHERE `department_id` = 50
);

5.5 where 或者having 接列子查询:
1、返回多行。
2、使用多行比较操作符。
在这里插入图片描述
列子查询(多行子查询)

#案例1:返回location_id是1400或1700的部门中的所有员工姓名
SELECT `last_name`
FROM `employees`
WHERE `department_id` IN (#可以替换成 =any 
        #查询location_id是1 400或1700的部门编号
	SELECT  DISTINCT `department_id`
	FROM `departments`
	WHERE `location_id` IN (1400,1700)
)

#案例2:返回其它工作中比job_id为'IT_PROG'工种任一工资低的员工的:工号,姓名,job_id,salary
SELECT `last_name`,`employee_id`,`job_id`,`salary`
FROM `employees`
WHERE salary < ANY( #可以替换成<,改成max(salary)
	#查询job_id为’IT_PROG'部门任一工资
	SELECT DISTINCT `salary`
	FROM `employees`
	WHERE `job_id` = 'IT_PROG'
)AND `job_id` <> 'IT_PROG';

#案例3:返回其它工种中比job_id为'IT_PROG'工种所有工资低的员工的:工号,姓名,job_id,salary
SELECT `last_name`,`employee_id`,`job_id`,`salary`
FROM `employees`
WHERE salary < ALL(#可以替换成<,改成min(salary)
	SELECT DISTINCT `salary` 
	FROM `employees`
	WHERE `job_id` = 'IT_PROG'
)AND `job_id` <> 'IT_PROG';

select 后面接标量子查询举例

#案例1:查询每个部门的员工个数 
SELECT d.*,(
	SELECT COUNT(*)
	FROM employees AS e
	WHERE e.department_id = d.department_id
) AS 个数
FROM `departments` AS d;

#案例2:查询员工号 = 102的部门名
#方法一:内连接之等值连接
SELECT `employee_id`,`department_name`
FROM `departments` AS d
INNER JOIN `employees` AS e
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` = 102;

#方法二:select 后面接标量子查询
SELECT (
	SELECT `department_name`
	FROM `departments` AS d
	INNER JOIN employees AS e
	ON  d.`department_id` = e.`department_id`
	WHERE e.employee_id = 102
) AS 部门名;

from后面接标量子查询:将子查询的结果充当一张表,要求该表必须起别名
举例

#案例:查询每个部门的平均工资的工资等级
SELECT ag_dep.*,g.grade_level
FROM (
	SELECT AVG(salary) AS ag,department_id
	FROM `employees`
	GROUP BY department_id
) AS ag_dep
INNER JOIN job_grades AS g
ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;

exists后面接子句(相关子查询)
语法:

exits(完整的查询语句); #查询结果为1或者0(bool类型)
#案例2:查询没有女朋友的男神信息
#使用in
SELECT bo.*
FROM boys AS bo
WHERE bo.id NOT IN(
	SELECT boyfriend_id
	FROM beauty
)

#使用exists
SELECT bo.*
FROM boy bo
WHERE NOT EXISTS(
	SELECT boyfriend_id
	FROM beauty AS b
	WHERE bo.id = b.boyfriend_id
);

进阶八:分页查询

8.1应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
8.2语法:

select  查询列表
from     表名
【(join type)   join2
on    连接条件
where 筛选条件
group by  分组字段
having   分组后的筛选
order by 排序的字段】
limit  offset ,size;#(offset:要显示条目的起始索引,从0开始;size:要显示的条目个数

8.3特点
limit 语句放在查询语句的最后
分页查询公式(跳转):
要显示的页数page,每页的条目数size
select 查询列表
from 表
limit (page-1)*size,size;

#案例1:查询前五条员工信息
SELECT * FROM `employees` LIMIT 0,5;
#从第一个开始时,offset可以省略
SELECT * FROM `employees` LIMIT 5;

#案例2:查询第11条——第25条
SELECT * FROM `employees` LIMIT 10,15;

#案例3:查询有奖金的员工信息,并且工资较高的前10名显示出来
SELECT *
FROM `employees`
WHERE `commission_pct` IS NOT NULL
ORDER BY salary DESC;
LIMIT 10;

进阶九:联合查询

9.1union 联合 (合并):将多条查询语句的结果合并为一个结果
9.2语法:

查询语句1
union
查询语句2
union
......
查询语句n

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值