SQL语句语法简介
SQL命令一般分为DQL、DML、DDL三类。
- DQL: Data QueryLanguage,即数据查询语句,基本就是SELECT查询命令,用于数据查询。
- DML: Data Manipulation Language,即数据操纵语言,主要用于插入、更新、删除数据,所以也分为INSERT、UPDATE、DELETE三种语句。
- DDL: Data Definition Language,即数据定义语言,简单来说,是用于创建、删除、修改表、索引等数据库对象的语言。

DDL语句
DDL语句是创建、修改和删除表的语句。
创建数据表
表是关系型数据库中最基本的对象,数据库中的表与实际生活中的二维表格很相似,表中有很多列也有很多行,每一列有一个名称,不同的列有不同的数据类型,比如,列可能是数字、文本字符串,也
可能是日期类型。
CREATE TABLE score (
student_name varchar(40),
chinese_score int,
math_score int,
test_date date
);

\d:显示数据库中有哪些表;
\d score”可以显示这张表的定义情况;
建表时可以指定表的主键,主键是表中行的唯一标识,这个唯一标识是不能重复的。
CREATE TABLE student(no int primary key, student_name
varchar(40), age int);

删除数据表
DROP TABLE student;

DML语句
DML语句用于插入、更新和删除数据,主要包含INSERT语句、UPDATE语句、DELETE语句。
INSERT语句
INSERT INTO student VALUES(1, '张三', 14);
INSERT INTO student(no, age, student_name) VALUES(2, 13,'李四');
INSERT INTO student(no, student_name) VALUES(3, '王五');

UPDATE语句
# 把student表中所有学生的年龄(age)更新为15
UPDATE student SET age = 15;
# 将学号(no)为 3 的学生的年龄更新为14岁
UPDATE student SET age =14 WHERE no = 3;
# 同时更新多个列的值
UPDATE student SET age =13, student_name='林新文' WHERE no= 3;

DELETE语句
# 删除学号(no)为 3 的学生的记录
DELETE FROM student WHERE no = 3;
# 删除表student表中所有数据
DELETE FROM student;

DQL语句
查询表中所有数据
# 查询student表中所有数据
select no, student_name, age from student;
# 列名为一个表达式
select age+5 from student;
# 列名与数据表列无关
select no, 3+5 from student;
# 当表达式与表列无关时,可以不使用 “FROM 表名”
select 55+88;
# 查询表中所有列的数据,则可以使用“*”代表所有列
select * from student;

过滤条件的查询、排序
# 过滤条件的查询
SELECT * FROM student where no=3;
SELECT * FROM student where age >= 15;
# 排序
SELECT * FROM student ORDER BY age;
# 排序子句“ORDER BY”应该在WHERE子句之后,如果顺序错了,执行时会报错
SELECT * FROM student ORDER BY age WHERE age >=15;
ERROR: syntax error at or near "WHERE"
LINE 1: SELECT * FROM student ORDER BY age WHERE age >=15;
SELECT * FROM student WHERE age >= 15 ORDER BY age;
# 按多个列对查询结果进行排序
SELECT * FROM student ORDER BY age,student_name;
# DESC 进行倒序排序
SELECT * FROM student ORDER BY age DESC;

分组查询
# 分组查询
SELECT age, count(*) FROM student GROUP BY age;

# 多表关联查询
# 数据准备
CREATE TABLE class(no int primary key, class_name varchar(40));
INSERT INTO class VALUES(1,'初二(1)班');
INSERT INTO class VALUES(2,'初二(2)班');
INSERT INTO class VALUES(3,'初二(3)班');
INSERT INTO class VALUES(4,'初二(4)班');
SELECT * FROM class;
CREATE TABLE student(no int primary key, student_name varchar(40), age int, class_no int);
INSERT INTO student VALUES(1, '声夜雪', 14, 1);
INSERT INTO student VALUES(2, '吕秋寒', 15, 1);
INSERT INTO student VALUES(3, '成光济', 13, 2);
INSERT INTO student VALUES(4, '靖和平', 15, 2);
INSERT INTO student VALUES(5, '桥梅英', 15, 3);
INSERT INTO student VALUES(6, '律觅山', 14, 3);
INSERT INTO student VALUES(7, '冀又琴', 15, 4);
INSERT INTO student VALUES(8, '张晓丝', 14, 4);
SELECT * FROM student;

# 查询每个学生的名字与班级名称的关系
SELECT student_name, class_name FROM student, class WHERE student.class_no = class.no;

IN、EXISTS、ANY、比较符查询
# IN 查询
SELECT * FROM student WHERE class_no in (select no FROM class where class_name = '初二(1)班');
# EXISTS 查询
SELECT * FROM student s WHERE EXISTS (SELECT 1 FROM class c WHERE s.class_no=c.no AND c.class_name = '初二(1)班');
# 比较符查询
SELECT * FROM student WHERE class_no = (SELECT no FROM class c WHERE class_name = '初二(1)班');
# ANY 查询
SELECT * FROM student WHERE class_no = any(SELECT no FROM class c WHERE class_name = '初二(1)班');

# 查询每个班级学生的最大年龄
SELECT no, class_name, (SELECT max(age) as max_age FROM student s WHERE s.no= c.no) as max_age FROM class c;
# 查询两个班级的学生记录
SELECT * FROM student WHERE class_no = any(SELECT no FROM class c WHERE class_name in ('初二(1)班', '初二(2)班'));

其他SQL语句
INSERT…SELECT语句
# 创建了一张学生表的备份表 student_bak
CREATE TABLE student_bak(no int primary key, student_name varchar(40), age int, class_no int);
# 把student的数据插入到student_bak表
INSERT INTO student_bak SELECT * FROM student;

UNION语句
SELECT * FROM student WHERE no = 1 UNION SELECT * FROM student_bak where no = 2;

# UNION语句可以把结果集中相同的两条记录合并成一条
SELECT * FROM student WHERE no = 1 UNION SELECT * FROM student_bak where no = 1;

# 不想合并结果集中的相同记录,可以使用UNION ALL语句
SELECT * FROM student WHERE no = 1 UNION ALL SELECT * FROM student_bak where no = 1;

TRUNCATE TABLE语句
- TRUNCATE TABLE语句的用途是清空表内容。
- 不带WHERE条件子句的DELETE语句也表示清空表内容,从执行结果来看,两者实现了相同的功能,但两者实现的原理是不一样的。
- TRUNCATE TABLE语句是DDL语句,即数据定义语句,相当于用重新定义一个新表的方法把原表的内容直接丢弃了;
- DELETE语句是DML语句,可以认为DELETE语句是把数据一条一条地删除;
# 把student_bak表中的数据清除
TRUNCATE TABLE student_bak;


结语
SQL(Structured Query Language) 是一种用于管理和操作关系型数据库系统的特定领域语言。
- 声明性语言
- SQL 是一种声明性语言,用户只需描述所需的结果,而不需要指定如何实现。数据库系统会根据用户的请求来优化查询和数据操作。
- 关系型模型
- SQL 是关系型数据库管理系统(RDBMS)的标准查询语言。数据以表格的形式组织,每个表格包含多个行和列。
- 数据查询和操纵
- SQL 提供了用于查询和操作数据库中数据的语句,如SELECT、INSERT、UPDATE 和 DELETE。这些语句允许用户检索、插入、更新和删除数据。
- 数据完整性
- SQL 提供了约束(Constraints)的概念,包括主键、外键、唯一约束等,以确保数据的完整性和一致性。
- 动态性
- SQL 是一种动态语言,用户可以根据需要构建复杂的查询,过滤条件和连接关系。
- 通用性
- SQL 是一种通用语言,几乎所有主流的关系型数据库管理系统(如MySQL、PostgreSQL、Oracle、SQL Server等)都支持 SQL。
- 数据查询优化
- SQL 查询优化是关系型数据库系统中的一个重要特点。数据库系统会尽可能高效地执行查询,优化执行计划以提高性能。
- 多表连接
- SQL 允许通过 JOIN 操作来连接多个表格,从而可以在查询中使用多个表格的数据。
总的来说,SQL 是一种强大而灵活的语言,适用于各种规模和类型的数据库应用。其标准化使得开发者可以在不同的数据库系统中使用相似的语法和查询方式。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




