SQL

2021-03-10 17:48:26 浏览数 (1)

sql概念

SQL 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL 具有如下优点。

  1. 一体化:SQL 集数据定义、数据操作和数据控制于一体,可以完成数据库中的全部工作。
  2. 使用方式灵活:SQL 具有两种使用方式,可以直接以命令方式交互使用;也可以嵌入使用,嵌入C、C 、Fortran、COBOL、Java 等语言中使用。
  3. 非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,而不需要告诉它“怎么做”,存储路径的选择和操作的执行由数据库管理系统自动完成。
  4. 语言简洁、语法简单:该语言的语句都是由描述性很强的英语单词组成,而且这些单词的数目不多。

SQL 包含以下 4 部分:

1)数据定义语言(Data Definition Language,DDL)

用来创建或删除数据库以及表等对象,主要包含以下几种命令:

  • DROP:删除数据库和表等对象
  • CREATE:创建数据库和表等对象
  • ALTER:修改数据库和表等对象的结构
2)数据操作语言(Data Manipulation Language,DML)

用来变更表中的记录,主要包含以下几种命令:

  • SELECT:查询表中的数据
  • INSERT:向表中插入新数据
  • UPDATE:更新表中的数据
  • DELETE:删除表中的数据
3)数据查询语言(Data Query Language,DQL)

用来查询表中的记录,主要包含 SELECT 命令,来查询表中的数据。

4)数据控制语言(Data Control Language,DCL)

用来确认或者取消对数据库中的数据进行的变更。除此之外,还可以对数据库中的用户设定权限。主要包含以下几种命令:

  • GRANT:赋予用户操作权限
  • REVOKE:取消用户的操作权限
  • COMMIT:确认对数据库中的数据进行的变更
  • ROLLBACK:取消对数据库中的数据进行的变更

常用sql

使用student_db表:

student_dbstudent_db

1.SQL SELECT 语句

SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集

代码语言:javascript复制
SELECT * from student_db;

2.SQL SELECT DISTINCT 语句

DISTINCT 去重一列重复的数据

代码语言:javascript复制
SELECT DISTINCT(country) from student_db;

3.SQL WHERE 子句

WHERE 子句用于提取那些满足指定条件的记录。

代码语言:javascript复制
SELECT * from student_db WHERE sex in ('男');

4.SQL AND & OR

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

代码语言:javascript复制
SELECT * from student_db WHERE sex in ('男') AND  country in ('CN');

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

代码语言:javascript复制
SELECT * from student_db WHERE  country in ('CN') OR  country in ('USA');

代码语言:javascript复制
SELECT * from student_db WHERE age > '30' and (country in ('CN') OR  country in ('USA'));

5.SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

按照年龄排序

升序:

代码语言:javascript复制
SELECT * from student_db ORDER BY age;

降序:

代码语言:javascript复制
SELECT * from student_db ORDER BY age DESC;

6.SQL INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。

插入一条橘子的记录

代码语言:javascript复制
INSERT INTO  student_db VALUES ('6','橘子', 5, '女', '云南', 'CN');

7.SQL UPDATE 语句

UPDATE 语句用于更新表中已存在的记录。

修改李四的性别为男

代码语言:javascript复制
UPDATE student_db  SET sex='男' WHERE name='李四';

8.SQL DELETE 语句

DELETE 语句用于删除表中的行。执行DELETE 语句 注意加上where 条件

删除姓名为张三的这一行数据

代码语言:javascript复制
DELETE FROM student_db WHERE name='张三';

9.SQL SELECT TOP 子句

SELECT TOP 子句用于规定要返回的记录的数目。

从 "student_db " 表中选取头两条记录:

显示student_db表的前两行数据

代码语言:javascript复制
SELECT * FROM student_db LIMIT 2;

10.SQL LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

查找出国家名字带A的

代码语言:javascript复制
SELECT * FROM student_db WHERE country LIKE '%A%';

11.SQL 通配符

SQL 通配符用于搜索表中的数据。

SQL % 通配符

代码语言:javascript复制
SELECT * FROM student_db WHERE country LIKE '%A%';

SQL _ 通配符

代码语言:javascript复制
SELECT * FROM student_db WHERE country LIKE '_A';

SQL [charlist] 通配符

MySQL 中使用REGEXPNOT REGEXP运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。

选取 couintry以 "U" 开始的所有国家

代码语言:javascript复制
SELECT * FROM student_db WHERE country REGEXP '^[U]';

12.SQL IN 操作符

IN 操作符允许在 WHERE 子句中规定多个值。

代码语言:javascript复制
SELECT * FROM student_db WHERE country IN ('CN','JA');

13.SQL BETWEEN 操作符

BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

代码语言:javascript复制
SELECT * FROM student_db WHERE age BETWEEN 10 AND 30;

14.SQL 别名

SQL别名,可以为表名称或列名称指定别名。

代码语言:javascript复制
SELECT name as 姓名, age as 年龄, sex as  性别 from student_db;

再加一张score_db表

score_dbscore_db

student_db 再插入一条数据

代码语言:javascript复制
INSERT INTO student_db VALUES (3, '西瓜', 18, '女', '北京', 'CN');

表的别名:

代码语言:javascript复制
SELECT st.id,st.name,st.age,st.sex,sc.object,sc.score from  student_db as st,score_db as sc WHERE st.id=sc.sid and sc.score >80;

15.SQL INNER JOIN 关键字

INNER JOIN 关键字在表中存在至少一个匹配时返回行。

代码语言:javascript复制
SELECT 
st.id,st.name,st.age,st.sex,sc.object,sc.score 
from  student_db as st 
INNER JOIN score_db as sc
on st.id=sc.sid 
ORDER BY st.age;

16.SQL LEFT JOIN 关键字

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

student_db 表 插入一条记录

代码语言:javascript复制
INSERT INTO student_db VALUES (7, '苹果', 25, '女', '苏州', 'CN');

左连接

代码语言:javascript复制
SELECT 
st.id,st.name,st.age,st.sex,sc.object,sc.score 
from  student_db as st 
LEFT JOIN score_db as sc
on st.id=sc.sid 
ORDER BY st.age;

17.SQL RIGHT JOIN 关键字

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

score_db 表插入一条数据

代码语言:javascript复制
INSERT INTO score_db VALUES (8, 8, '英语', 100);

右连接

代码语言:javascript复制
SELECT 
st.id,st.name,st.age,st.sex,sc.object,sc.score 
from  student_db as st 
RIGHT JOIN score_db as sc
on st.id=sc.sid 
ORDER BY st.age desc ;

18.SQL SELECT INTO 语句

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

代码语言:javascript复制
SELECT *
INTO student1_db
FROM student_db;

19.SQL INSERT INTO SELECT 语句

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

代码语言:javascript复制
INSERT INTO table2
SELECT * FROM table1;

20.SQL CREATE DATABASE 语句

CREATE DATABASE 语句用于创建数据库。

代码语言:javascript复制
CREATE DATABASE dbname;

21.SQL CREATE TABLE 语句

CREATE TABLE 语句用于创建数据库中的表。

代码语言:javascript复制
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

22.SQL 约束(Constraints)

在 SQL 中,我们有如下约束:

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
  • DEFAULT - 规定没有给列赋值时的默认值。

后续继续补充。。。

0 人点赞