<<第一章检索记录>>:关于表使用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 MANAGERKING WORKS AS A PRESIDENTMILLER 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%');