SQL基础语法-查询

SQL基础语法

  • 基本查询
    • SQL分类
    • 基本查询语法
  • 限定查询
  • 模糊排序查询
    • 模糊查询
    • 排序查询
  • 多表查询
  • 连接查询
    • 内连接查询
    • 外连接查询
  • 常用函数
  • 分组统计查询
    • 分组统计查询的三个规则
  • HAVING 子句
  • 子查询
    • `WHERE`子查询
    • `FROM`子查询
    • `SELECT`子查询
    • `HAVING`子查询
    • `EXISTS`子查询
  • `ROWNUM`伪列
    • 使用`ROWNUM`实现分页查询

基本查询

SQL分类

数据操纵语言(DML Data Manipulation Language)

SELECT(查询)
INSERT(插入数据)
UPDATE(更新数据)
DELETE(删除数据)

数据定义语言(DDL Data Definition Language)

CREAT
ALTER
DROP
RENAME
TRUNCATE

数据控制语言(DCL Data Control Language)

GRANT(比如授权远程连接、权限授权)

事件(Transaction)

COMMIT
ROLLBACK

基本查询语法

②SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】

注意:

  • 以上两个子句在数据库中执行是由顺序的,先执行from后执行select;*表示查询所有字段信息,此处也可以使用字段名,查询指定字段的信息
  • 在字段名前加DISTINCT关键字,可以去除重复信息
  • 别名的使用,可以使用AS也可以不用,注意在FROM子句中数据来源使用别名时,不要使用AS
  • 字段内容是数字类型的支持四则运算

限定查询

语法

③SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】
②WHERE 过滤条件					【WHERE 子句】
  • WHERE 子句是对数据进行条件判断,之后显示出满足条件的数据
  • BETWEEN AND的使用,小的数据在前,大的数据在后,对日期和数字可用,且BETWEEN AND被数据认为是一个判断条件,执行效率快,a > b AND a < c 数据库认为是两个判断,执行效率较慢
  • UNION ALL的使用,用于连接或操作,相比OR,可以将查询结果显式的合并在一起并且避免索引失效
  • 判断语句ISIS NOTINNOT IN

模糊排序查询

模糊查询

  1. _:表示任意一个字符
  2. %:表示任意个任意字符
  3. 实现模糊查询要使用LIKE关键字
    基本语法:
③SELECT 
①FROM 
②WHERE 模糊查询的字段 LIKE 模糊查询的条件

排序查询

排序查询使用关键字ORDER BY
基本语法:

③SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】
②WHERE 过滤条件					【WHERE 子句】
④ORDER BY 排序的字段 ASC|DESC 	【ORDER BY 子句】

注意:
ORDER BY子句在SELECT子句之后执行,可以使用SELECT子句中使用的别名
排序的字段内容类型是数字或日期(英文也可以)

多表查询

  1. 多表查询就是从多张数据表中查询
  2. 多表查询又叫连接查询
  3. 多表查询会出现笛卡尔积,需要在WHERE中定义条件去除后显示(因为笛卡尔积是在产生后被消除不显示,所以数据量的时候不能用多表查询,消耗性能)

连接查询

内连接查询

内连接查询,只查询满足条件的数据,默认的就是内连接查询
可以使用 INNER JION...ON... 关键字在JOIN之后加入另一张数据表,在ON之后消除笛卡尔积

外连接查询

外连接查询分为:左外连接查询、右外连接查询、全外连接查询
左外连接查询和右外连接查询可以使用(+)来表示,注意位置与名称是相反的,且此写法只在ORACLE中有效,通用的写法如下

FROM (表1) LEFT OUTER JOIN (表2) ON (消除笛卡尔积语句)	左外连接
FROM (表1) RIGHT OUTER JOIN (表2) ON (消除笛卡尔积语句)	右外连接
FROM (表1) FULL OUTER JOIN (表2) ON (消除笛卡尔积语句)	全外连接

常用函数

COUNT(*|字段名)统计查询到的内容非空的数据量
SUM(字段名)对该字段的内容求和
AVG(字段名)求平均数
MAX(字段名)求最大值
MIN(字段名)求最小值
SYSDATE动态显示当前系统时间
NVL(expression1,expression2)优先返回expression1的结果,当1的结果为null时,返回expression2的结果,两者都为null时返回null

分组统计查询

使用GROUP BY子句,基本语法如下:

④SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】
②WHERE 过滤条件					【WHERE 子句】
③GROUP BY 字段名					【GROUP BY子句,对满足条件的数据进行分组】
⑤ORDER BY 排序的字段 ASC|DESC 	【ORDER BY 子句】

分组统计查询的三个规则

  1. 如果SELECT子句中使用了统计函数,同时没有BROUP BY子句的话,SELECT子句中只允许有统计函数,不允许出现字段名
  2. 如果使用了BROUP BY子句,那么SELECT子句中出现的字段名必须是分组字段
  3. 如果SELECT子句中出现了嵌套函数,那么该子句中不允许再出现统计函数之外的任何字段

HAVING 子句

HAVING子句是对分组统计函数统计出的结果进行过滤的句子

⑤SELECT *						--查询数据
①FROM 数据来源					--找到数据源
②WHERE 条件判断					--对数据源进行过滤
③GROUP BY 分组字段				--对满足条件的数据分组
④HAVING 对统计函数进行判断		--对分组统计的数据进行过滤
⑥ORDER BY 排序字段 排序方式		--对过滤后的数据进行排序

WHEREHAVING的区别

  • WHEREGROUP BY子句之前执行,HAVINGGROUP BY子句之后执行
  • WHERE中不能有统计函数,HAVING中可以使用统计函数对数据进行过滤

子查询

子查询就是将一个查询的结果作为另一个查询(主查询)的数据来源或者判断条件的查询,子查询需要使用小括号括起来
常见的子查询有

WHERE子查询

DEMO 查询出薪资排名第三的雇员信息
在这里插入图片描述
SQL基础语法-查询_第1张图片
SQL基础语法-查询_第2张图片

FROM子查询

FROM后面的数据来源可以是数据表,也可以是一个子查询的结果
使用FROM子查询注意

  1. FROM子查询的结果作为主查询的数据来源,子查询结果相当于一张临时数据表
  2. 必须为子查询定义别名(规范,不定义不会报错)
  3. 如果要使用子查询中的字段名应该使用别名.字段名来引用

SELECT子查询

HAVING子查询

EXISTS子查询

EXISTS子查询特征:将主查询中的数据带入到子查询中进行验证,通过返回true,主查询显示该数据,不通过返回false,主查询不显示该数据
NOT EXISTS子查询与EXISTS子查询相反

ROWNUM伪列

ROWNUM是动态的在数据表中生成一列,即一个字段,这列数据不属于数据表是动态生成的且该列数据必须从1开始
DEMO1

SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp;

SQL基础语法-查询_第3张图片DEMO2 查询第一条数据

SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE ROWNUM = 1;

在这里插入图片描述
查询第一条数据的意义在于和DESC共用方便观察数据表

DEMO2 查询第二条数据

SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE ROWNUM = 2;

在这里插入图片描述
因为ROWNUM要求该列必须从1开始,因此直接查第二条数据无法完成,需要使用子查询(这是分页查询的基础)
SQL基础语法-查询_第4张图片

使用ROWNUM实现分页查询

DEMO

SELECT *
	FROM(
		SELECT ROWNUM AS rn, empno,ename,job,sal,hiredate,mgr,comm,depto
			FROM emp
				WHERE ROWNUM <=10) temp
			WHERE rn >=6;

通过以上代码可以实现查询第6-10条数据,假如我们要求网页中数据每页显示5条,这刚好是第二页的数据
计算当前页数据的ROWNUM公式如下:

起始位置 m = (cp-1)*ls+1
最终数据位置 n = cp*ls
注:cp表示当前页,ls表示每页显示数据量

你可能感兴趣的:(SQL,SQL)