文章目录
第6讲 SQL概述
结构化查询语言(Structured Query Language)
结构化查询语言(Structured Query Language,SQL)是集DDL、DML和DCL于一体的数据库语言,由以下9个引导词引导的操作语句:
- DDL语句引导词:
create
、alter
、drop
; - DML语句引导词:
insert
、delete
、update
、select
; - DCL语句引导词:
grant
、revoke
。
SQL规范
参数约定
从本节开始,文中将会出现一些SQL语法,因此读者必须掌握一些语句中参数的描述方式:
<parameter>
:必填参数;[\<parameter\>]
:可选参数;A|B
:从A或B中任选其一,在必填参数和可选参数中使用。
关于双飘号(``)的使用
SQL中有一些保留字,当用户使用这些保留字作为参数时,就需要使用双飘号将其包裹。例如,当创建名为select的数据库时,需要使用
create database `select`;
而不是
create database select;
关于分号(;)的使用
在SQL中,分号用于分隔SQL语句。当要执行一条语句时,分号可有可无;当要执行多条语句时,需要使用分号分隔每条语句,否则会报错。
SQL通用数据类型
SQL提供了多种数据类型。
值类型
数据类型 | 描述 |
---|---|
boolean ,bool | 布尔值,存储true 和false |
smallint | 有符号整数,范围为 ( − 32768 , 32767 ) (-32768,32767) (−32768,32767)。 |
integer ,int | 整数,范围为 ( − 2147483648 , 2147483647 ) (-2147483648,2147483647) (−2147483648,2147483647)。 |
bigint | 整数,范围为 ( − 9223372036854775808 , 9223372036854775807 ) (-9223372036854775808,9223372036854775807) (−9223372036854775808,9223372036854775807)。 |
float | 单精度浮点数,范围为 ( − 3.402823466 × 1 0 38 , − 1.175494351 × 1 0 − 38 ) ∪ { 0 } ∪ ( 1.175494351 × 1 0 − 38 , 3.402823466 × 1 0 38 ) (-3.402823466\times10^{38},-1.175494351\times10^{-38})\cup\{0\}\cup(1.175494351\times10^{-38},3.402823466\times10^{38}) (−3.402823466×1038,−1.175494351×10−38)∪{0}∪(1.175494351×10−38,3.402823466×1038) |
double | 单精度浮点数,范围为 ( − 1.7976931348623157 × 1 0 308 , − 2.2250738585072014 × 1 0 − 308 ) ∪ { 0 } ∪ ( 2.2250738585072014 × 1 0 − 308 , 1.7976931348623157 × 1 0 308 ) (-1.7976931348623157\times10^{308},-2.2250738585072014\times10^{-308})\cup\{0\}\cup(2.2250738585072014\times10^{-308},1.7976931348623157\times10^{308}) (−1.7976931348623157×10308,−2.2250738585072014×10−308)∪{0}∪(2.2250738585072014×10−308,1.7976931348623157×10308) |
decimal(p, s) | 精确数值,p为精度,s为小数点后位数。 |
字符串类型
数据类型 | 描述 |
---|---|
char(n) | 字符串,固定长度为 n n n。 |
varchar(n) | 字符串,最大长度为 n n n。 |
binary(n) | 二进制串,固定长度为 n n n。 |
日期时间类型
数据类型 | 描述 |
---|---|
date | 存储年、月、日的值。 |
time | 存储时、分、秒的值。 |
timestamp | 存储年、月、日、小时、分、秒的值。 |
INTERVAL | 由一些整数字段组成,代表一段时间,取决于区间的类型。 |
SQL基本操作
创建数据库
语法:
create database <database_name>;
参数:
database_name
:必填,数据库名。
例:创建名为SCT的数据库
create database SCT;
创建表
语法:
create table <table_name> (
<column_name> <data_type> [primary key|unique|not null] [,
<column_name> <data_type> [unique|not null]...
]
);
参数:
column_name
:必填,列名。data_type
:必填,数据类型。primary key|unique|not null
:可选,列的约束。primary key
:主键约束。unique
:唯一约束。not null
:非空约束,指该列不允许出现空值。
例:创建学生表。
create table students (
Sno char(8) primary key not null,
Sname char(10) not null,
Ssex char(2) not null,
Sage integer not null,
Saddress varchar(255)
);
插入记录
语法:
insert into <table_name> values <record...>;
table_name
:必填,表名。record
:必填,记录元组。元组需与表的列保持一致,可使用逗号(,)分隔多个元组。
insert into <table_name>(<column_name...>) <record...>;
table_name
:必填,表名。column_name
:必填,列名,可使用逗号(,)分隔多个列名。record
:必填,记录元组。元组需与表的列保持一致,可使用逗号(,)分隔多条记录。
例:向students表插入记录(students表的模式见上方)。
insert into students
values ('202401010101', '张三', '男', 18, '广东省深圳市龙岗区************2A座8层A'),
('202402010301', '李四', '女', 18, null);
insert into students(Sno, Sname, Ssex, Sage)
values ('202411020101', '王五', '女', 18);
单表简单查询
语法:
select [distinct|] <column_name...> from <table_name> [condition] [sort];
column_name
:必填,列名,可使用逗号(,)分隔多个列名,使用星号(*)代替全部列。table_name
:必填,表名。condition
:可选,使用where
引导的检索条件语句,具体使用见下方示例。sort
:可选,格式为order by <column_name> [asc|desc]
,默认为升序(asc)。
例1:查询学生表中所有学生的信息。
select * from students;
例2:查询学生表中年龄小于18岁的学生的学号及姓名。
select Sno, Sname from students where Sage < 18;
例3:查询学生表中年龄大于20岁的男生的信息。
select * from students where Sage > 20 and Ssex = '男';
例4:查询地址在广东省的所有学生的信息,按年龄降序排列。
select * from students where Saddress like '广东%' order by Sage desc;
模糊查询的匹配规则:
\
:转义字符。%
:匹配零个或多个任意字符。_
:匹配单个任意字符。