结构化查询语言:
结构化查询语言(Structured Query Language)简称SQL, 是操作和检索关系型数据库的标准语言,20世纪70年代由IBM公司开发,目前应用于各种关系型数据库
1.结构化查询语言分类:
数据查询语言(DQL:Data Query Language):语句主要包括SELECT,用于从表中检索数据
数据操作语言(DML:Data Manipulation Language):语句主要包括INSERT,UPDATE和DELETE,用于添加,修改和删除表中的行数据
事务处理语言(TPL:Transaction Process Language): 语句主要包括COMMIT和ROLLBACK,用于提交和回滚
数据控制语言(DCL:Data Control Language):语句主要包括GRANT和REVOKE,用于进行授权和收回权限
数据定义语言(DDL:Data Definition Language):语句主要包括CREATE、DROP、ALTER,用于定义、销毁、修改数据库对象
基本语法
SELECT语法:SELECT [DISTINCT]{*|column|expression [alias],...}
FROM table;
相关概念:关键字(Keyword):SQL语言保留的字符串,例如,SELECT和FROM都是关键字
语句(statement):一条完整的SQL命令。例如:SELECT * FROM dept 是一条语句
子句(clause):部分的SQL语句,通常是由关键字加上其它语法元素构成,例如,SELECT * 是一个子句,FROM table也是一个子句
SQL概念和规则
SQL语句的书写:不区分大小写,也就是说SELECT,select,Select,执行时效果是一样的
可以单行书写,也可多行书写,建议多行书写,增强代码可读性,通常以子句为单位进行分行
关键字不可以缩写、分开以及跨行书写,如SELECT不可写成SEL或SELE CT等形
关键字最好使用大写,其它元素(如列名、表名等)小写
Tab和缩进的使用可以提高程序的可读性
选择列
1.select from 表名 2.select 字段、... from 表名 (指明字段查询更快一点)
算术运算符:SELECT语句中使用算术运算符(+、-、、/),改变输出结果
-优先级:乘除优先于加减,相同优先权的表达式按照从左至右顺序依次计算,括弧可以提高优先权,并使表达式的描述更为清晰
空值(NULL):
1.是指一种无效的、未赋值、未知的或不可用的值,不同于零或者空格
2.任何包含空值的算术表达式运算后的结果都为空值(NULL)
列别名:
1.用来重新命名列的显示标题,如果SELECT语句中包含计算列,通常使用列别名来重新定义列标题。
2.使用列别名的方法:方式1:列名 列别名 方式2:列名 AS 列别名
3.以下情况两侧需要添加双引号:列别名中包含有空格、列别名中要求区分大小写、列别名中包含有特殊字符
消除重复行
使用关键字DISTINCT可消除重复行:
SELECT DISTINCT 字段 FROM 表名;
显示表的结构:
使用DESCRIBE 命令来查看表结构:DESC[RIBE] 表名
选择限定数据行
使用WHERE子句可以返回限定的数据:
SELECT [DISTINCT] {*| column | expression [alias], ...} FROM table
[WHERE condition(s)];
其中:WHERE子句紧跟在FROM子句之后;condition(s)表示条件表达式:通常格式为:列名 比较操作符 要比较的值
比较操作符:=、>、>=、<、<=、<>(不等于)
比较数值型数据:SELECT ename, job, deptno FROM emp WHERE deptno=20;
比较字符型数据:SELECT ename, job, deptno FROM emp WHERE JOB='CLERK';
注意单引号
比较日期型数据:SELECT ename, deptno, hiredate FROM emp WHERE hiredate>'1992-10-31';
注意单引号
特殊比较运算符
1.BETWEEN...AND...:判断要比较的值是否在某个范围内
2.IN( 集合列表):判断要比较的值是否和集合列表中的任何一个值相等
3.LIKE:判断要比较的值是否满足部分匹配,也叫模糊查询。其中有两个通配符:% 代表零或任意更多的字符、_ 代表一个字符
另外使用ESCAPE标识符实现对“%”和 “”的查找:
例:查询 JOB 以“MAN”开头的雇员信息
SELECT ename,job FROM emp WHERE job LIKE 'MAN@_%' ESCAPE '@';
其中双引号里的@可以是其他的字符
4.IS NULL:判断要比较的值是否为空值NULL
5.逻辑运算符:当需要和多个条件表达式进行比较时,包括and、or 、not
结果为true,false,null
not和特殊运算符的搭配: 可以和not between...and、not like、is not null一起使用
运算符优先级:算术运算符(+、-、、/), 比较运算符(看上面)、特殊比较运算符、逻辑非(not)、逻辑与(and)、逻辑或(or)(注意and大于or*)
order by子句
SELECT [DISTINCT] { * | 列名 |表达式 [别名][,...]} FROM 表名 [WHERE 条件] [ORDER BY {列名|表达式|列别名|列序号} [ASC|DESC],…];
其中排序默认是升序(asc),order by 语句必须写在select语句的后面
规则:数字升序(由小到大),日期升序(由小到大),字符升序(按字母由小到大),空值在升序中排序在最前面
限制记录的行数:
语法格式如下:select 字段列表 from 表名 limit [start,]length;
语法解释 :limit可以接受1或2个整数,start(表示第一行值为0)表示第几行记录开始输出,length表示输出的记录行数