SQL语句 简单查询及复杂查询

一、简单查询
(1)基本查询
只查询特定的列

SELECT eid,ename FROM emp;

查询所有的列

SELECT * FROM emp;

为列取别名

SELECT eid AS i,ename, AS n FROM emp;
或SELECT eid AS i,ename n FROM emp;

只显示不同的值,重复的值仅显示一次

SELECT DISTINCT deptId FROM emp;

查询过程中执行算数运算

SELECT salary*12+comm AS annualsalary FROM emp;

(2)查询排序
可以使用ORDER BY子句对查询结果集进行排序
升序排列——ASC

SELECT*FROM emp ORDER BY salary ASC;

降序排列——DESC

SELECT*FROM emp ORDER BY deptId,age DESC;

按多列排序

SELECT*FROM emp ORDER BY deptId,age DESC;

(3)条件查询
条件查询,实现根据特定的条件对结果集进行筛选。
进行相等或不等判定

SELECT*FROM emp  WHERE eid = 81;
SELECT*FROM emp  WHERE ename = 'Tom';
SELECT*FROM emp  WHERE salary > 6000;
SELECT*FROM emp  WHERE salary < 6000;
SELECT*FROM emp  WHERE salary >= 6000;
SELECT*FROM emp  WHERE salary <= 6000;
SELECT*FROM emp  WHERE deptId != 20;

条件查询过程中,可以使用AND、OR关键字实现多个查询条件的“并”、“或”。
多条件查询的“并”——同时都满足

SELECT*FROM emp WHERE age > 40 AND deptId = 10;
SELECT*FROM emp WHERE age between 20 AND 30;

多条件查询的“或”——只要满足其中之一即可

SELECT*FROM emp WHERE salary > 8000 OR salary < 4000;
SELECT*FROM emp WHERE deptId IN (10,30,40);

条件查询过程中,可以使用NOT关键字实现查询条件的“非”

SELECT*FROM emp WHERE deptId NOT IN (10,30,40);

条件查询过程中,可以使用LIKE关键字实现模糊查询

SELECT*FROM emp WHERE ename LIKE '_e%';

(4)分页查询
不同数据库中的分页查询语法各部相同。MySQL使用LIMIT关键字实现分页查询
基本语法

SELECT*FROM emp 
[WHERE...]
[ORDER BY...]
LIMIT start,count;
#start指定从哪一行开始获取记录,第一行下标为0;
#count指定一次最多可以读取的记录行数

假设每页最多显示20条记录,则获取各页对应数据可以使用如下语句:

SELECT*FROM emp LIMIT 0,20;  #第一页
SELECT*FROM emp LIMIT 20,20;  #第2页
SELECT*FROM emp LIMIT 40,20;  #第3页
......
SELECT*FROM emp LIMIT (n-1)*20,20;  #第n页

二、复杂查询
(1)分组查询
MySQL提供了5个聚合函数,可以对查询结果进行特定的运算:MAX,MIN,SUM,COUNT,AVG.
查询指定列上的最大值

SELECT MAX(salary) FROM emp;  #查询工资最大值

查询指定列上的最小值

SELECT MIN(salary) FROM emp;  #查询工资最小值

查询指定列上数据的总和

SELECT SUM(salary) FROM emp;  #查询工资总和

查询指定列上数据的数量

SELECT COUNT(salary) FROM emp;  #查询工资数量

查询指定列上数据的平均值

SELECT AVG(salary) FROM emp;  #查询工资平均值

分组查询,指将指定列上值相同的记录划分在一组中,在组内进行聚合运算

SELECT MAX(salary) FROM emp GROUP BY deptId;
SELECT SUM(salary) FROM emp GROUP BY deptId;
SELECT COUNT(salary) FROM emp GROUP BY deptId;
SELECT AVG(salary) FROM emp GROUP BY deptId;

(2)子查询
子查询,是在一个查询语句中的某个或多个子句中包含其他的查询语句,是一种符合的查询语句。

SELECT  * FROM emp
WHERE deptId = {
  SELECT did FROM dept
  WHERE dname = '研发部'
};

子查询也经常出现在DML语句中

UPDATE emp 
SET salary = salary * 1.1
WHERE deptId = (
  SELECT did FROM dept
  WHERE dname = '研发部'
);

(3)跨表查询
跨表查询也称多表查询,指一次性查询的结果集中出现来自多个表中的多格列。
在SQL-92标准中,采用如下的形式:

SELECT ename,dname
FROM emp AS e,dept AS d
WHERE e.deptId = did;

注意:若不指定相等条件会产生“笛卡尔积”,在SQL-92标准中的跨表查询语句中无法查询出两个表中判定条件列上值为NULL的记录。

解决方法:结果集合并。
UNION关键字用于将两个查询结果集合合并为一个大的结果集。
合并结果集,重复数据仅显示一遍

SELECT ename FROM emp_cn
UNION
SELECT ename FROM emp_us;

合并结果集,允许出现重复数据

SELECT ename FROM emp_cn
UNION ALL
SELECT ename FROM emp_us;
上一篇: SQL语句 列类型及列约束
下一篇: js基础 数据类型
作者邮箱: 203328517@qq.com