数据查询之简单查询

简单查询语句
  (1) 只查询特定的列
语法:SELECT  列名1, 列名2,..  FROM  表名;
示例:查询所有的员工姓名及其工资
SELECT ename, salary FROM emp;
  (2) 查询所有的列
语法:SELECT  *  FROM  表名;
提示:* 指代“所有列”
  (3) 给列取别名,以简化或者更好的说明
语法(2种方式):
SELECT 列名 AS 别名, 列名 AS 别名 FROM 表名;
SELECT 列名 别名, 列名 别名 FROM 表名; 
示例:查询所有的员工birthday(生日)、salary(月薪)、ename(姓名)
  SELECT birthday AS 生日, salary AS 月薪, ename 姓名 FROM emp;  
  SELECT  birthday  AS  '生日'  FROM emp;
  (4) 只显示列上不同的值(即合并相同的值)
语法:SELECT  DISTINCT  列名 FROM 表名;
示例:查看哪些部门有员工
SELECT   DISTINCT  dept_id FROM emp;
  (5) 按照指定列上的值排序
语法:
SELECT ... FROM ... ORDER  BY  列名 [ASC];  #默认是按升序排列
SELECT ... FROM ... ORDER  BY  列名 DESC; #DESC是降序排列
示例:查询员工的所有信息,记录行按照工资由小到大排序
SELECT * FROM emp  ORDER  BY  salary;
SELECT * FROM emp  ORDER  BY  salary  DESC;
查询员工的所有信息,按照员工部门编号升序排序;若部门编号相同,再按生日降序排序
  SELECT * FROM emp ORDER BY dept_id ASC, birthday DESC;
  (6) 查询时进行运算
示例:查询每个员工的姓名及其年薪
SELECT ename, salary*12 AS 年薪 FROM emp;
     练习:公司给每人加薪500,查询出每个员工姓名、月薪、年薪
SELECT ename, salary+500 AS 月薪, (salary+500)*12 AS 年薪 FROM emp;
  (7) 查询出满足特定条件的记录行 —— 重要
语法:SELECT ... FROM ... WHERE 条件;
其中的“条件”可以是多种表达式,如:
=     >    <     >=      <=      !=
示例:查询出30号部门的员工的所有信息
SELECT  * FROM emp WHERE dept_id=30;
练习:查询出工资在18000及以上的员工的所有信息
SELECT * FROM emp WHERE salary>=18000;
查询出在1990-10-5日以前出生的员工所有信息
SELECT * FROM emp WHERE birthday < '1990-10-5' ORDER BY birthday;
查询出不在20号部门的员工的所有信息
SELECT * FROM emp WHERE dept_id  !=  20;
SELECT * FROM emp WHERE dept_id  <>  20;
   其中的“条件”还可以是多种表达式的组合,如
AND(并且)     OR(或者)     NOT(非)
   示例:查询出工资在10000~20000的员工的所有信息
    SELECT * FROM emp WHERE  (salary<=20000) AND (salary>=10000);
  练习:查询出1990年10月出生的员工;
   SELECT * FROM emp WHERE (birthday>='1990-10-1') AND (birthday<='1990-10-31');
   SELECT * FROM emp WHERE  birthday BETWEEN '1990-10-1' AND '1990-10-31';
   查询出20和30号部门的员工的所有信息
   SELECT * FROM emp WHERE (dept_id=20)  OR (dept_id=30);
   查询出20、30、40、80号部门的员工的所有信息
   SELECT * FROM emp WHERE (dept_id=20)  OR (dept_id=30)  OR (dept_id=40)  OR  (dept_id=80);
  SELECT * FROM emp WHERE dept_id  IN  (20, 30, 40, 80);
      查询出部门不在20、30、40、80范围的员工的所有信息
  SELECT * FROM emp WHERE (dept_id!=20)  AND (dept_id!=30)  AND (dept_id!=40)  AND (dept_id!=80);
  SELECT * FROM emp WHERE dept_id  NOT  IN  (20, 30, 40, 80);


补充小知识: 如何查询部门编号为NULL的员工所有信息
NULL不能用=和!=进行判定!
SELECT * FROM emp WHERE dept_id=NULL;   //错误

SELECT * FROM emp WHERE dept_id  IS  NULL;  //正确

如何查询部门编号不为NULL的员工所有信息
SELECT * FROM emp WHERE dept_id  IS NOT NULL; 

分页查询 —— LIMIT 
语法: SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT start, count;
start: 表示从满足条件的哪一行记录开始读取,第一行称为0
count:此次最多读取多少行记录
假设每一页显示5条记录:
第1页: ... LIMIT 0, 5;
  第2页: ... LIMIT 5, 5;
  第3页: ... LIMIT 10, 5;
第4页: ... LIMIT 15, 5;
第5页: ... LIMIT 20, 5;
...
第N页:... LIMIT (N-1)*5, 5;    
练习:分页查询出所有的员工信息,只要第1页
  SELECT * FROM emp LIMIT  0, 5;
分页查询出所有的员工信息,只要第2页
  SELECT * FROM emp LIMIT  5, 5;
分页查询出所有的员工信息,只要第3页
  SELECT * FROM emp LIMIT  10, 5;   //3
分页查询出所有的员工信息,只要第4页
  SELECT * FROM emp LIMIT  15, 5;   //0
分页查询出10部门所有的员工信息,只要第1页
       SELECT * FROM emp WHERE dept_id=10 LIMIT 0, 5;
分页查询出10部门所有的员工信息,只要第2页
  SELECT * FROM emp WHERE dept_id=10 LIMIT 5, 5;
  (9 )模糊查询 —— LIKE
示例:查询出姓名包含字母e的所有员工信息
  SELECT * FROM emp WHERE ename='e';  //错误
  SELECT * FROM emp WHERE ename='%e%'; //错误
  SELECT * FROM emp WHERE ename LIKE '%e%'; //正确
SQL查询中,   % 代表任意多个任意字符;  _ 代表任意一个字符
练习:查询出姓名中以m结尾的员工的所有信息
  SELECT * FROM emp WHERE ename LIKE '%m';
查询出姓名中倒数第二个字符是i的员工的所有信息
  SELECT * FROM emp WHERE ename LIKE '%i_';

版权声明:本文为tianqingmuyu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。