SQL查询语句 (二)
一,执行算术运算符,比较运算符
算术操作符有【 +,-,*,/ 】,比较运算符【=,>,<,<>,>=,<=】
聚集函数
AVG() 返回某列的平均数
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列之和
二,from子句与多表连接查询
通过在 from 子句中指定多个表时,select 操作会使用 “连接” 运算将不同表中需要查询的数据组合到一个结果中,并同样以一个临时表的形式返回。
1.交叉连接
通过在 from 子句中使用关键字 “cross join” 来连接两张表,从而实现一张表的每一行与另一张表的每一行的笛卡尔乘积,并返回两张表的每一行相乘的所有可能搭配结果。
select * from 表1 cross join 表2
2.内连接
内连接就是利用条件判断表达式中的比较运算符来 组合两张表中的记录。只有当两个表中的指定条件匹配时,这些表中的行才会被包含在内连接的结果中。
select 列名
from 表名1
inner join 表名2
on 条件判断表达式
列名:用于指定需要检索的列的名称或者别名
表名:用于指定进行内连接的两张表的表名
on:on子句通过事先设定的连接条件来指定两张表按什么条件进行连接,且连接条件中可采用如何一种比较运算符。
3.使用表别名
select id,name,address,score
from student as stu,student_information as stu_infor
where stu.id=stu_infor.userid
stu是student的别名,stu_infor是student_information的别名
4.自然结
查询 dept_name为商务 的emp_name,sex ,jobs
(1)子查询
(2)自然结
虽然上述的两个SQL都可以查询出来数据,但是自然结比子查询更加快
5.外连接
外连接是首先将连接的两张表分为基表和参考表,然后再以基表为依据返回满足和不满足条件的记录
(1)左外连接
左外连接,也成左连接,它使用关键字 “left outer join” 或关键字 “left join” 来连接两张表
“left outer join”或“left join”左边表(也称为基表)的所有行,并用这些行与该关键字右边表(也称为参考表)中的行进行匹配,,即匹配左表中的每一行及右表中符合条件的行。
(2)右外连接
右外连接,也成右连接,它使用关键字 “right outer join” 或关键字 “right join” 来连接两张表
右外连接是以右表为基表,连接方法与左外连接完全一样
(3)使用聚集函数的外连接
select c.id,c.name,count(or.num)
from customers as c left outer join orders on c.id=or.id
group by c.id
(4)组合查询 union 是一种将两个或多个select语句的结果集合并在一起的方法
需要价格小于等于5的所有物品,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)
select id,prod_id,price from products where price<=5
union
select id,prod_id,price from products where id in (1001,1002);
union 关键字指示MySQL执行两条select 语句
作为参考下面是使用where 进行查询的语句
select id,prod_id,price from products where price<=5 or id in (1001,1002);
使用限制
1)union 必须由两条或两条以上的select语句组成,语句之间用union分隔
2)union中的每个查询必须包含相同的列,表达式或聚集函数
3)union自动去除了重复的行。例如供应商 1002生产的一种物品的价格也低于5,两条select语句都返回该行,但是在使用union时重复的行被自动取消了
如果需要包含除非的行则可以使用 union all 语句
三,group by子句与分组数据
GROUP BY 以某个字段创建分组。根据一个或多个列对结果集进行分组。
从字面上来理解,GROUP 表示分组,BY 后接字段名,表示根据某个字段进行分组。
group by 通常和聚合函数一起使用
四,having子句
在select语句中,除了能使用 group by 子句分组数据之外,还可以使用 having 子句来过滤分组
having 与 where 的差别
where 子句主要用于过滤 数据行 ,而 having 子句主要用于过滤分组即 having 子句可基于分组的聚合值而不是特定行的值来过滤数据。
having 子句中的条件可以包含聚合函数,而where 子句中则不可以
where 子句会在数据分组前进行过滤,having子句则会在数据分组后进行过滤。因而。where子句排除的行不包含在分组中
五.子查询
可以使用select语句创建子查询,即可嵌套在其他select查询中的select查询
下面SQL的执行顺序是 先执行括号中的select语句,select S_No from tb_score where>70,再执行外面的SQL语句。
一,拼接字段
Concat()函数:把多个串连接起来形成一个较长的串
as 别名
希望查询出来的列的名称显示为自定义的列名可以在select语句中添加 as 子句到指定的列名之后原来修改列名