一、SQL 概述
1. SQL定义:SQL是结构化查询语言,用于访问和处理数据库,包括数据插入、查询、更新和删除。
2. 版本历史:SQL起源于1970年代IBM的研究,1986年成为ANSI标准,1987年成为ISO标准。
3. 基本语法规范:包括
SELECT
: `column_name ` 是要查询的列,`table_name` 是数据表名,`condition` 是筛选条件
select column_name from table_name where condition
INSERT INTO
:向表中插入新记录
insert into table_name(column1,column2,...)values(value1,value2,...)
INSERT INTO ... SELECT ...
语句是一种非常常见的用法,它允许从一个表中选择数据并将其插入到另一个表中。这种方式的优点是可以直接从源表中获取数据,而不需要手动指定每个值。
UPDATE
:更新表中的数据
update table_name set column=new_value where condition;
DELETE FROM
:删除表中满足特定条件的行
delete from table_name where condition;
CREATE TABLE
:用于创建新的表,定义列名、数据类型等信息。
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。
create table table-name(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
);
JOIN
:连接两个或多个表,如 INNER JOIN, LEFT JOIN, RIGHT JOIN 等,用于获取多个表之间的关联数据
查询条件是学生表和处分表都有的student_id的结果集
INNER JOIN操作的作用是:内联操作,将符合ON条件的A表和B表结果均搜索出来,然后合并为一个结果集。
SELECT
STU.student_id,
STU.name,
STU.class,
P.punishment
FROM student AS STU
INNER JOIN punishment AS P
ON STU.student_id=P.student_id;
LEFT JOIN的作用是:左联操作,左联顾名思义是,将符合ON条件的B表结果搜索出来,然后左联到A表上,然后将合并后的A表输出。
SELECT stu.student_id,stu.name,stu.class,p.punishment
FROM student stu
LEFT JOIN punishment p
ON stu.student_id = p.student_id;
RIGHT JOIN的作用是
:右联操作,右联顾名思义是,将符合ON条件的A表结果搜索出来,然后右联到B表上,然后将合并后的B表输出
WHERE:用于指定查询条件,过滤返回的结果
GROUP BY\HAVING:用于对查询结果进行分组和过滤聚合
ORDER BY:按照指定列对查询结果进行排序
COMMIT和ROLLBACK:前者提交事务,后者回滚事务以撤销AS
AS
为表或列指定别名,以提高查询结果的可读性,并且在查询中可以使用这些别名来引用相应的表或列。!只是在输出时更替,不会对表结构造成影响。
1. 为列指定别名
在查询语句中,可以使用AS
关键字为查询结果中的列指定一个别名。例如:
SELECT column_name AS alias_name FROM table_name;
这将把列名column_name
指定为别名alias_name
,查询结果中将使用别名alias_name
来表示该列。
2. 为表指定别名
同样地,可以使用AS
关键字为查询中的表指定一个别名。例如:
SELECT column_name FROM table_name AS alias_name;
这将把表名table_name
指定为别名alias_name
,查询语句中可以使用别名alias_name
来引用该表。
3. 实际应用示例
列别名:假设有一个学生表students
,包含字段id
, name
, age
。可以使用以下查询:
SELECT id AS 学生ID, name AS 学生姓名, age AS 年龄 FROM students;
这样查询结果中列的名称将分别是“学生ID”、“学生姓名”和“年龄”。
表别名:如果在一个查询中多次引用同一个表,可以使用表别名来简化查询语句:
SELECT s.id, s.name, s.age FROM students AS s;
这里将students
表命名为s
,在查询中可以使用s
代替students
。
IN 和 NOT IN
用于判断某字段的值是否属于in列表中的某一项
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, ..., valueN);
在这里,column_name
是要检查的列名,而value1, value2, ..., valueN
是要检查的值列表,这些值可以是常量、子查询或从其他表中选取的值。
使用场景和优势
- 语法简洁:使用IN操作符可以使SQL查询语句更加清晰易读,特别是在需要匹配多个值时,避免了使用多个OR条件。
- 管理方便:当需要修改匹配条件时,只需要调整IN列表中的值,而不需要在多个OR条件中进行修改。
- 执行效率:在某些情况下,数据库引擎可能会对IN操作符进行优化,使其执行效率高于多个OR条件。
- 支持子查询:IN操作符可以与子查询结合使用,从而动态生成匹配列表,增加查询的灵活性。
示例
简单的IN操作符应用:假设有一个名为Products
的表,包含如下数据,你希望检索出价格为3.49或9.49的所有产品。使用IN操作符的查询语句如下
SELECT prod_name, prod_price FROM Products WHERE prod_price IN (3.49, 9.49);
IN操作符结合子查询:假设你有两个表Products
和Suppliers
,你想要查询那些由Supplier A和Supplier B提供的所有产品。可以使用子查询结合IN操作符来实现:
SELECT p.prod_name, p.prod_price FROM Products p JOIN Suppliers s ON p.supplier_id = s.supplier_id WHERE s.supplier_name IN ('Supplier A', 'Supplier B');
BETWEEN AND
用于选择特定范围内的值
二、SQL 分类
1. DDL(Data Definition Languages):数据库定义语句,用于创建数据库中的对象。
2. DML(Data Manipulation Language):数据操作语言,用于管理数据库中的数据。
3. DCL(Data Control Language):数据控制语句,用于授权/撤销数据库及其字段的权限。
4. DQL(Data Query Language):数据查询语言,用于查询数据库中的数据。
三、DDL(Data Definition Language)
1. 基本操作:包括操作数据库、数据类型、操作表等。
2. 操作数据库:CREATE DATABASE、DROP DATABASE、ALTER DATABASE。
3. 数据类型:数字型、日期和时间类型、字符串类型。
4. 操作表:CREATE TABLE、DROP TABLE、ALTER TABLE、RENAME TABLE。
四、DML(Data Manipulation Language)
1. 插入数据:使用INSERT INTO语句添加记录。
2. 修改数据:使用UPDATE语句修改表中的数据。
3. 删除数据:使用DELETE FROM语句删除记录。
五、DCL(Data Control Language)
1. 创建用户:使用CREATE USER语句创建新的数据库用户。
2. 给用户授权:使用GRANT语句为用户分配访问权限。
3. 撤销授权:使用REVOKE语句撤销用户的访问权限。
4. 查看用户权限:使用SHOW GRANTS语句查看用户当前的权限列表。
5. 删除用户:用DROP USER语句来删除一个用户。
6. 修改用户密码:通过ALTER USER语句可以修改用户的密码。
六、DQL(Data Query Language)
1. 基础查询:利用SELECT语句查询数据库中的数据。
2. 条件查询:通过使用WHERE子句设定查询条件。
3. 模糊查询:使用LIKE子句,配合通配符%和_进行模糊查询。
4. 字段控制查询:运用DISTINCT关键字进行去重查询。
5. 排序:用ORDER BY子句按照一个或多个列进行排序。
6. 聚合函数:包括COUNT,SUM,MAX,MIN,AVG等函数。
7. 分组查询:GROUP BY子句用于结合聚合函数,依据一个或多个列进行分组。
8. LIMIT:用来限定查询结果的起始行,以及总行数。
9. 多表连接查询:包括内连接、左连接、右连接、全外连接和笛卡尔积。
补充
回滚(Rollback)是数据库管理中的一个重要概念,它指的是将数据库中的某些操作恢复到它们发生之前的状态。这通常发生在数据库事务处理过程中,当一个事务由于某种原因无法成功完成时,系统会自动执行回滚操作,以确保数据库的一致性和完整性。
---------------------------------------------------------------------------------------------------------------------------------
DATEDIFF (date1, date2) 计算时间差
ORDER BY salary ASC/DASC;
然后salary就能升序/降序排列