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 子句到指定的列名之后原来修改列名

 

posted @ 2022-09-14 18:06  越长大越孤单哦  阅读(86)  评论(0编辑  收藏  举报