数据库操作中最常用,最复杂的操作就是查询了,下面我们总结一下不同数据库几种常见的查询方式以及对应的SQL语句:
单表查询
首先,我们了解一下用于查询的关键字 select 意思是:选择;挑选;,从字面意思我们可以知道这个关键字是从表中挑选出符合我们需要的数据
语句:
1.查询表中所有信息
select * from 表名
2.查询表中符合指定条件的每一行信息
select * from 表名 where 条件
3.根据条件从表中选出想要列数据
select 列1列2.... from 表名 where 条件
-- 这句可以理解为从表中筛选出符合当前条件指定列信息
以上是单表查询的操作,单表操作比较简单,还有一点需要注意,在查询时可以对查询的列进行赋值运算,如果想要显示的舒服一些,可以给赋值后的列取别名:后面加上空格加别名,或者用 as 关键字:
在薪水上加100 :
sal+100 薪水 或者 sal+100 as 薪水
这样查询列名结果就是薪水,使用别名很方便,在表中,列中都可以使用列名,在属性后直接加空格在加别名,或者用as关键字即可。
再介绍查询时用到的函数:
1.concat('char','char'......)
select comcat('char','char'......) from 表名 where 条件
-- 用于连接字符串,注意当参数里面出现了null时则连接后的字符串就转为null
2.distinct
select distinct * from table
-- 对查询信息去重
多表连接查询
上面介绍的单表查询比较简单,但是在实际开发中我们几乎很少只对一个表操作,通常是在多表之间联合查询,这时候我们就需要多张表联合起来查询——多表连接查询。
顾名思义多表连接查询肯定要用到连接,所以我们先了解一下常见的几种连接方式:
1.等值连接
2.内连接
3.左连接
4.右链接
我们先介绍一下笛卡尔积:没有任何连接条件就成为笛卡尔积,笛卡尔积会带来什么问题呢?
会出现大量重复数据,这显然不是我们希望看到的,所以我们需要定义连接来解决笛卡尔积问题
等值连接
要求两列值相等达到等值连接,想要构成等值连接前提必须至少有小于表数减一个等值连接条件。
-- 通过等值连接获取表一,表二中的符合条件的信息
select * from 表1 a,表2 b where a.列名=b.列名 and 条件....
等值连接还可以自连接,常用于以下场景:查找与某某同一部门的信息
select b.* from 表 1 a,表 2 b where a.部门号=b…部门号 and a.name=‘某某某’ 否
内连接
内连接可以取代等值连接以及非等值连接但是语法不同
select from * 表1 inner join 表 on 条件
-- join on语句只能定义一个表和一个条件如果需要连接多个表需要继续加join on语句
左连接
左连接,在进行左连接的时候他会以左边的表为基准,把左边表的信息全部显示出来,即便不符合等值条件,条件既可以等值也可以不等值,语法与内连接相似:
select from * 表1 left join 表 on 条件
-- join on语句只能定义一个表和一个条件如果需要连接多个表需要继续加join on语句
右连接
右连接与左连接恰恰相反,在进行右连接的时候他会以右边的表为基准,把右边表的信息全部显示出来,即便不符合等值条件,条件既可以等值也可以不等值,语法与内连接相似:
select from * 表1 right join 表 on 条件
-- join on语句只能定义一个表和一个条件如果需要连接多个表需要继续加join on语句
子查询
下面还有一种子查询介绍一下:
子查询就是在一个查询中嵌套另一个查询,最常见的就是把一个查询作为另外一个查询的结果:
单行子查询:
举例:
select * 1 from 表 where 列属性2=(select 列属性2 from 表
where 条件)
多行子查询
select * 1 from 表 where 列属性2 in (select 列属性2 from 表
where 条件)
-- in代表在这个区间内
多列子查询(临时表)
select * from 表,
(select 列属性1 from 表 where 条件)t1 ,
(select 列属性2 from 表 where 条件)t2,
where 条件
-- 把查询结果当成一个临时表
注意:虽然子查询思路清晰,比较容易,但是在进行查询时我们应该避免使用子查询,因为子查询涉及到多次查询,查询较慢。