目录
一、SQL语句的基本规则
二、基本的SELECT语句与用法
1、基本的SELECT用法
2、列的别名
3、去除重复行
4、空值运算
5、着重号
6、显示表结构
7、 使用 WHERE 过滤数据
三、运算符的使用
1.算术运算符
2.比较运算符
3.逻辑运算符
4、补充
四、数据的排序以及分页
1、排序规则
2、数据的分页
SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
每条命令以 ; 或 \g 或 \G 结束(可不写)
关键字不能被缩写也不能分行
关于标点符号(此为重点
必须保证所有的()、单引号、双引号是成对结束的
必须使用英文状态下的半角输入方式
字符串型和日期时间类型的数据可以使用单引号(' ')表示
列的别名,尽量使用双引号(" "),而且不建议省略as
语法:
SELECT //识别列
FROM //选择表
识别全部列
SELECT * FROM DUAL //DUAL为伪表 具体可为要查询的表。 * 通配了所有列
由于一个列名太长,我们可以使用列的别名来简化列名。
重命名的方式
1、直接在列名的后面空格后输入列的别名。例如
SELECT last_name ln
FROM employee; //此时 ln 即为列的别名
弊端 使用空格可能会让人看漏看花,个人不推荐用此方式。
2、在列名的后面使用关键词 AS.例如
SELECT last_name AS ln
FROM employee; //此时 ln 即为列的别名
使用AS可以让读者明确使用了列别名,此为正规方式,推荐使用
3、在列名后接空格后在双引号内写,例如
SELECT first_name, last_name "last name"
FROM employee; //此时 "last name" 即为列last_name的别名
优点:当遇到列名需要空格时可使用该方式,其余命名方式均不可实现空格命名。 但在实际操作中不推荐使用空格命名,此行为将影响可读性及其后续代码使用。当需要空格时可用下划线代替。
在默认情况下,查询将返回所有行。
当需要去重时可在列前加上关键字 DISTINCT
SELECT DISTINCT person_age
FROM person; //去除了重复年龄
这里有两点需要注意:
DISTINCT 需要放到所有列名的前面
DISTINCT 其实是对后面所有列名的组合进行去重
所有运算符或列值遇到null值,运算的结果都为null
在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。
当你遇到关键字作为名字参与运算时 应使用 `order`的方式 例如
SELECT `order`
FROM all_order; // order与关键字ORDER重合 故需使用着重号
为什么?
在win 与macOS的 环境中大小写是不敏感的 所以即便你输入的是 order 在代码实际运行时会被解读为 ORDER ,但这并不代表我们可以随意更改大小写。我们应采用规范的书写方式。
如下:
数据库名、表名、表别名、字段名、字段别名等都小写
SQL 关键字、函数名、绑定变量等都大写
使用DESCRIBE或DESC命令,表示表结构
DESCRIBE employees;
或
DESC employees;
其中,各个字段的含义分别解释如下:
Field:表示字段名称。
Type:表示字段类型,这里 barcode、goodsname 是文本型的,price 是整数类型的。
Null:表示该列是否可以存储NULL值。
Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。
Default:表示该列是否有默认值,如果有,那么值是多少。
Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等
语法:
SELECT 字段
FROM 表
WHERE 条件;
注意 WHERE 语句紧随FROM语句,在任何情况下都是如此。
说明、在数据库进行查询时
1.访问from 后面的表,
2.根据where对表进行检索,此时检索出来的表依然是完全表,
3.运行SELECT语句对表筛选列,将列返回到用户页面中。
故将where放置其它位置将导致程序报错。
举例:
SELECT employee_id, department_id
FROM employees
WHERE department_id >= 90 ;
算术运算符用于数学运算 有基本的 加+ 减- 乘* 除/ 四则运算,外加 取模%运算
额外: 除法可使用关键字 DIV 代替 ,取模可使用关键字 MOD 代替。
特点:
1.在MySQL中+只表示数值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算。(补充:MySQL中字符串拼接要使用字符串函数CONCAT()实现)
2.在MySQL中,一个数除以0为NULL。
其余运算法则逻辑与正常逻辑基本一致。
由于是学习笔记,我只选择重点说明
1.安全等于运算符 <=>
由于在sql语言中 null会使任何计算值为null 即 123 = null 的返回值不是期望中的0 而是null;
这使得对null的判断不能用一般的 = 进行,故引出 <=>。
在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。
2.不等于运算符
不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL
3.非符号比较符
除正常符号比较符外,sql还有非符号比较符,同样选择性笔记。
最小值运算符 语法格式为:LEAST(值1,值2,...,值n)。其中,“值n”表示参数列表中有n个值。在有两个或多个参数的情况下,返回最小值。
最大值运算符 语法格式为:GREATEST(值1,值2,...,值n)。其中,n表示参数列表中有n个值。当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。
IN运算符 IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。
举例
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
逻辑非(NOT或!)、逻辑与(AND或&&)、逻辑或(OR或||)、逻辑异或(XOR)
逻辑异或运算符 逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。
注意:
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。
其余还有位运算以及正则表达式,位运算与正则使用较少且理解不深、如有后续学习再进行补充。
使用 ORDER BY 子句排序
ASC(ascend): 升序
DESC(descend):降序
ORDER BY 子句在SELECT语句的结尾。
排序可分为单列排序和多列排序。
单列排序例子:
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC ;
多列排序例子:
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
补充
可以使用不在SELECT列表中的列排序。
在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。
MySQL中使用 LIMIT 实现分页
LIMIT [位置偏移量,] 行数
第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个参数“行数”指示返回的记录条数。
例子:
--前10条记录:
SELECT * FROM 表名 LIMIT 0,10;
或者
SELECT * FROM 表名 LIMIT 10;
--第11至20条记录:
SELECT * FROM 表名 LIMIT 10,10;
--第21至30条记录:
SELECT * FROM 表名 LIMIT 20,10;