SQL语法
Posted 多弗朗强哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语法相关的知识,希望对你有一定的参考价值。
F9执行
表的每一行称为记录(Record),记录是一个逻辑意义上的数据。
表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。
数据类型
名称 | 类型 | 说明 |
---|---|---|
INT | 整型 | 4字节整数类型,范围约+/-21亿 |
BIGINT | 长整型 | 8字节整数类型,范围约+/-922亿亿 |
REAL | 浮点型 | 4字节浮点数,范围约+/-1038 |
DOUBLE | 浮点型 | 8字节浮点数,范围约+/-10308 |
DECIMAL(M,N) | 高精度小数 | 由用户指定精度的小数, 例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算 |
CHAR(N) | 定长字符串 | 存储指定长度的字符串, 例如,CHAR(100)总是存储100个字符的字符串 |
VARCHAR(N) | 变长字符串 | 存储可变长度的字符串, 例如,VARCHAR(100)可以存储0~100个字符的字符串 |
BOOLEAN | 布尔类型 | 存储True或者False |
DATE | 日期类型 | 存储日期,例如,2018-06-22 |
TIME | 时间类型 | 存储时间,例如,12:20:59 |
DATETIME | 日期和时间类型 | 存储日期+时间,例如,2018-06-22 12:20:59 |
主键
用来唯一定位记录的
选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。
对于大部分应用来说,通常自增类型的主键就能满足需求。
把数据与另一张表关联起来,这种列称为外键
外键并不是通过列名实现的,而是通过定义外键约束实现的:
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);
其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)。
要删除一个外键约束,也是通过ALTER TABLE实现的:
ALTER TABLE students
DROP FOREIGN KEY fk_class_id;
关系数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。
增加唯一索引
ALTER TABLE students
ADD UNIQUE INDEX uni_name (name);
查询
基本查询
SELECT * FROM <表名>
SELECT是关键字,表示将要执行一个查询,*表示“所有列”,FROM表示将要从哪个表查询
条件查询
SELECT * FROM <表名> WHERE <条件表达式>
可以使用NOT、AND、OR编写条件
如果不加括号,条件运算按照NOT、AND、OR的优先级进行,即NOT优先级最高,其次是AND,最后是OR。加上括号可以改变优先级
常用的条件表达式
条件 | 表达式举例1 表达式举例2 | 说明 |
---|---|---|
使用=判断相等 | score = 80 name = ‘abc‘ | 字符串需要用单引号括起来 |
使用>判断大于 | score > 80 name > ‘abc‘ | 字符串比较根据ASCII码,中文字符比较根据数据库设置 |
使用>=判断大于或相等 | score >= 80 name >= ‘abc‘ | 无 |
使用<判断小于 | score < 80 name <= ‘abc‘ | 无 |
使用<=判断小于或相等 | score <= 80 name <= ‘abc‘ | 无 |
使用<>判断不相等 | score <> 80 name <> ‘abc‘ | 无 |
使用LIKE判断相似 | name LIKE ‘ab%‘ name LIKE ‘%bc%‘ | %表示任意字符,例如‘ab%‘将匹配‘ab‘,‘abc‘,‘abcd‘ |
投影查询
使用SELECT *表示查询表的所有列,使用SELECT 列1, 列2, 列3则可以仅返回指定列,这种操作称为投影。
SELECT语句可以对结果集的列进行重命名。
例如:
SELECT id, score points, name FROM students WHERE gender = ‘M‘;
id points name
1 90 小明
3 88 小军
6 55 小兵
7 85 小林
9 89 小王
排序
ORDER BY
栗子:
SELECT id, name, gender, score FROM students ORDER BY score;
加上DESC可以反序
SELECT id, name, gender, score FROM students ORDER BY score DESC;
分页
LIMIT
LIMIT 3 OFFSET 0;
对结果集从0号记录开始,取3条。注意SQL记录集的索引从0开始。
聚合查询
SELECT COUNT(*) FROM students;
10
函数 | 说明 |
---|---|
SUM | 计算某一列的合计值,该列必须为数值类型 |
AVG | 计算某一列的平均值,该列必须为数值类型 |
MAX | 计算某一列的最大值 |
MIN | 计算某一列的最小值 |
多表查询
多表查询公式
SELECT * FROM <表1> <表2>
普通的多表查询
SELECT
students.id sid,
students.name,
students.gender,
students.score,
classes.id cid,
classes.name cname
FROM students, classes;
多表查询且设置别名
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c;
多表查询+条件查询
SELECT
s.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cname
FROM students s, classes c
WHERE s.gender = ‘M‘ AND c.id = 1;
连接查询
选出所有学生,同时返回班级名称
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;
注意INNER JOIN查询的写法是:
先确定主表,仍然使用FROM <表1>的语法;
再确定需要连接的表,使用INNER JOIN <表2>的语法;
然后确定连接条件,使用ON <条件...>,这里的条件是s.class_id = c.id,表示students表的class_id列与classes表的id列相同的行需要连接;
可选:加上WHERE子句、ORDER BY等子句。
修改
INSERT:插入新记录;
UPDATE:更新已有记录;
DELETE:删除已有记录。
INSERT
INSERT语句的基本语法是:
INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
栗子:
INSERT INTO students (class_id, name, gender, score) VALUES (2, ‘大牛‘, ‘M‘, 80);
INSERT INTO students (class_id, name, gender, score) VALUES
(1, ‘大宝‘, ‘M‘, 87),
(2, ‘二宝‘, ‘M‘, 81);
SELECT * FROM students;
UPDATE
UPDATE语句的基本语法是:
UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
栗子:
UPDATE students SET name=‘大牛‘, score=66 WHERE id=1;
在UPDATE语句中,更新字段时可以使用表达式。例如,把所有80分以下的同学的成绩加10分:
UPDATE students SET score=score+10 WHERE score<80;
DELETE
DELETE语句的基本语法是:
DELETE FROM <表名> WHERE ...;
DELETE FROM students WHERE id>=5 AND id<=7;
DELETE FROM students WHERE id=999;
主流关系数据库
目前,主流的关系数据库主要分为以下几类:
- 商用数据库,例如:Oracle,SQL Server,DB2等;
- 开源数据库,例如:MySQL,PostgreSQL等;
- 桌面数据库,以微软Access为代表,适合桌面应用程序使用;
- 嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。
参考链接:
https://www.liaoxuefeng.com/wiki/1177760294764384
以上是关于SQL语法的主要内容,如果未能解决你的问题,请参考以下文章