SELECT有的教材和书籍上也被称作是DML语言的一种,但SELECT并不影响数据的变化,所以很多地方也称作是DQL语言。不论是属于哪种,我们都应该着重学习、掌握,并能熟练运用。下面我将从易到难的记录下我所遇到的SELECT语句。
1.基本语法格式
查询表的全部记录:
SELECT * FROM 表名;--查询该表所有数据。
查询表的指定列:
SELECT 列名[,列名2] FROM 表名;--查询该表该字段所有数据。
可以查询单个或多个字段,也可以运用算数表达式,需注意的是,查询的字段必须在该表内,否则将报错。字段与字段用英文半角逗号(',')隔开,例如:
SELECT ID,NAME FROM CLASS;--查询班级表中的学号和姓名。符号'--'在数据库中表示单行注释。
SELECT SALARY*12 FROM EMP;--查询员工的年薪。
SELECT 12*SALARY+100 FROM EMP;查询员工的年收入。
SELECT 12*(SALARY+100) FROM EMP;查询员工的年收入。在运算表达式中,括号()是可以改变运算的优先顺序的。
给表或列起别名:
SELECT 12*(SALARY+100) [AS ]INCOME FROM EMP;查询员工的年收入。在这里给这个运算表达式起了个别名INCOME,中间的AS可以省略。当然,表名也是可以用别名的,同列名一样,中间的AS可以省略。
SELECT 12*(T.SALARY+100) INCOME FROM EMP T;查询员工的年收入。在这里给这个运算表达式起了个别名INCOME,中间的AS可以省略。当然,表名也是可以用别名的,同列名一样,中间的AS可以省略。
NVL函数及字符串拼接符:
NVL函数:将空值转换成相应格式的数据,常见的是转换成0。
SELECT 12*(NVL(T.SALARY,0)+100) INCOME FROM EMP T;查询员工的年收入。
||:字符串拼接符。
SELECT FRISTNAME||LASTNAME '姓名' FROM EMP;查询员工姓名。
重复行的处理DISTINCT:
DISTINCT函数:去除重复数据。
SELECT DISTINCT DEPTNO FROM EMP;查询部门编号。
还有很多常用函数,在此就不一一举例了,后续鄙人会专门写一篇关于函数的随笔,敬请关注,也多多指教。当然,数据库中还有一些常用的默认表单。
常见表举例:
SELECT * FROM DUAL;--DUAL是一个单行单列的空表,提供给我们试用函数功能的。
SELECT * FROM ALL_ALL_TABLE;查询所有表。
SELECT A.COLUMN_NAME 字段名,A.DATE_TYPE 数据类型,A.DATA_LENGTH 长度,A.DATE_PRECISION 整数位,A.DATA_SCALE 小数位,A.NULLABLE 是否为空,A.DATA_DEFAULT 缺省值,B.COMMENTS 备注
FROM USER_TAB_COLUMNS A,USER_COL_COMMENTS B
WHERE A.TABLE_NAME = B.TABLE_NAME AND A.COLUMN_NAME = B.COLUMN_NAME
and A.TABLE_NAME = '表名';--查询某表的字段名、数据类型、长度、备注等信息。
2.数据条件筛选
SELECT * FROM 表名 WHERE 条件;--查询符合该条件下的所有数据。
where条件查询:
SELECT * FROM EMP WHERE LASTNAME = 'SMITH';查询emp表中lastname为SMITH的员工的信息。
在查询中使用表达式、运算符:
SELECT * FROM EMP WHERE SALARY > '1500' AND DEPT_ID='50';--查询emp表中部门为50并且工资大于1500的员工的信息。
使用like,between,in进行模糊查询:
SELECT * FROM EMP WHERE SALARY BETWEEN 1500 AND 2000;--查询工资1500到2000的员工的信息。
SELECT * FROM DEPT WHERE REGION_ID IN (1,3);--查询dept表中region_id为1,3的部门信息。
SELECT * FROM EMP WHERE LAST_NAME LIKE '%A%';--查询emp表中姓中含有字母A的员工信息。
SELECT * FROM EMP WHERE LAST_NAME LIKE '_A%';--查询emp表中姓中第二个字母为A的员工信息。
SELECT * FROM USER_TABLES WHERE TABLE_NAME LIKE 'S\_%';--查询当前用户下所有以‘S_’开头的表。是转义符。
3.排序
SELECT * FROM 表名 WHERE 条件 ORDER BY 列名[ ASC/DESC];--查询符合该条件下的所有数据,并按给出字段进行升序或者倒序排序。
ASC是升序排列,DESC是倒序排序,默认是升序排序。
SELECT ID,SCORE FROM SCORE ORDER BY SCORE DESC;查询班级成绩,并从高到低排序。
4.分组
SELECT 分组列名,聚合函数 FROM 表名 WHERE 条件 GROUP BY 列名 ORDER BY 列名[ ASC/DESC];--查询符合该条件下的所有数据,分组显示,并按给出字段进行正序或者倒序排序。
SELECT 分组列名,聚合函数 FROM 表名 WHERE 条件 GROUP BY 列名 HAVING 条件 ORDER BY 查询列名[ ASC/DESC];--查询符合该条件下的所有数据,分组显示,再次筛选出符合条件的数据,并按给出字段进行正序或者倒序排序。
聚合函数又称组函数,常用的有5个,分别是求和、平均、最大、最小、数量。
SELECT AVG(SALARY) FROM EMP;--查询所有员工的平均工资。
SELECT DEPT_ID,MAX(SALARY) FROM EMP GROUP BY DEPT_ID;--查询各部门的最高工资。
SELECT DEPT_ID,MIN(SALARY) FROM EMP GROUP BY DEPT_ID;--查询各部门的最低工资。
SELECT DEPT_ID,COUNT(SALARY) FROM EMP GROUP BY DEPT_ID;--查询各部门的人数。
SELECT DEPT_ID,SUM(SALARY) FROM EMP GROUP BY DEPT_ID;--查询各部门的工资总和。
想了想,单表查询好像就只有这几种了,但是这几种里面又有很多变化。这我就不一一去说了,得看个人了。