<<第一章检索记录>>:关于表使用SELECT语句和特殊字符“*”;
*:SELECT * from emp;
1:分别列出每一行:SELECT empno,ename,job,mgr,comm from emp
2:检索部分行:使用WHERE子句指定保留行数
SELECT * FROM emp WHERE depyon = 10
3:查找满足多个条件行使用WHERE子句以及OR和AND子句查找多个条件数据
查找部门10中所有员工,所有得到提成员工以及部门20中工资不超过2000美金员工:
dempton为10或者comm不为空,或者工资最多为2000而且deptno为20;
SELECT * FROM emp WHERE depton =10 or comn is not null or sal<=2000 AND dempton=20
SELECT * FROM emp WHERE (deptno='10' OR comm IS NOT NULL OR sql<=2000)AND deptno='20'
4:表中检索部分列
SELECT子句指定列保证不返回多余数据
SELECT ename,deptno FROM emp;
5:为列(起)取有意义名称:AS关键字可以查询到新取的名称,新名称就是别名
SELECT `job` AS `jobect`,`sal` AS `sall`FROM `emp`;
6:WHERE子句中引用取别名的列:
SELECT `job` AS `jobect`,`sal` AS `sall`FROM `emp` WHERE `sal`>1500 ;
7:连接列值;
CLARK WORKS AS A MANAGER
KING WORKS AS A PRESIDENT
MILLER WORKS AS A CLERK
要得到来自不同列数据
SELECT ename,job FROM emp WHERE deptno='10';
查找和使用DBMS提供内置函数,来连接来自不同列值 DB2,Oracle,PostgreSQL
这些数据库使用双竖线作为连接运算符
SELECT ename||’WORKS AS A '|| job AS msg FROM emp WHERE deptno='10';
MYSQL: SELECT CONCAT (`ename`, 'WORKS AS A ', `job`)AS `mgr` FROM WHERE deptno='10';
8:在SELECT语句中使用条件逻辑
条件:要产生一个结果集,如果一个员工工资小于等于2000美金,就返回消息“UNDERPAID”如果大于
等于4000美金就返回“OVERPAID”如果在两者之间返回“OK”
SELECT ename,sal, CASE WHEN sal<=2000 THEN 'UNDERPAID' WHEN sal>=4000 THEN 'OVERPAID' ELSE 'OK' END AS STATUS FROM emp;
9:限制返回行数
限制返回行数,不关心顺序,返回任何n行都行
SELECT * FROM emp LIMIT 5;
10:在表中随机返回n条记录
SELECT ename ,job FROM emp;
使用DBMS支持内置函数来生成随机数值,在ORDER BY 子句中使用对该行进行随机排序,
然后来限制所返回的行的数目。
SELECT ename,job FROM emp ORDER BY RAND() LIMIT 5;
11:查找空值
查找某列为空的所有行
SELECT * FROM emp WHERE comm is null;
***12: 将空值转换为实际值
在一些行中包含空值,需要使用非空值代替这些空值(空值转换为非空值)
SELECT coalesce(comm,0) FROM emp;
SELECT CASE WHEN comm IS NULL THEN 2 ELSE comm END FROM emp;
13:按模式搜索
需要返回匹配特定子串或模式行,考虑查询和结果集
SELECT ename,job FROM emp WHERE deptno in(10,20);
条件:使用LIKE运算和sql通配符‘%’
在部门10和部门20,需要返回名字中有一个‘I’或者职位(job title)中带有‘ER’的员工;
SELECT `ename`,`job` FROM `emp` WHERE deptno IN (10,20) AND(ename LIKE '%I%' OR `job` LIKE '%ER%');