SQL的组成
SQL 的定义:一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
SQL 又称为结构化查询语言
数据定义语言(DDL Definition)
主要SQL语句有:
create:用于创建数据库或者数据库对象
alter:用于对数据库或数据库对象进行修改
drop:用于删除数据库或数据库对象
数据操纵语言(DML Manipulation)
包括的主要SQL语句有:
select:用于从表或视图中检索数据;
insert:用于讲数据插入表或视图中;
update:用于修改表或视图中的数据,一行或多行;
delete:用于删除表或视图(指定/全部)数据。
数据控制语言(DCL Control)
包括的主要SQL语句有:
grant:用于授予权限;
revoke:用于收回权限
SQL语言
[**] 中为可选项
索引
索引是提高数据文件访问效率的有效方法。
弊端:索引是以文件的形式存储的(需要占用磁盘空间)
索引在提高查询速度的同时,却会降低更新表的速度
按照用途划分:
- 普通索引(index)
- 唯一性索引 (unique)
- 主键 (primary key)
- 全文索引
- 聚簇索引
列级索引: 单列索引、 组合索引(多列组合)
索引的创建:
一个表可以有多个索引,但是每个索引在表中的名称唯一
通常再创建表时,一同创建索引
常用:
create [unique] index index_name on tb_name(column_name[len][asc|desc],...)
添加索引:
alter table tb_name
索引的查看
show index|indexs|keys from|in tb_name
索引的删除
drop index index_name on tb_name
或
alter table tb_name drop index_name
数据库
创建数据库
create database|schema [if not exists] db_name
选择数据库
use db_name
修改数据库
alter (database|schema) [db_name]
删除数据库
drop database db_name
查看数据库
show (databases|schemas)
数据表
数据类型:
- 数值类型:整数类型、浮点类型
- 日期和事件类型:日期类型、日期事件类型
、时间戳类型 - 字符串类型:固定长度类型、可变长度类型、文本类型
创建表:
create table [if not exists] tb_name(
字段名 数据类型 [列级完整性约束条件] [默认值]
……)
常用约束
约束语句 | 作用 |
---|---|
AUTO_INCREMENT | 自增,多用于id字段,记录数据数量 |
PRIMARY KEY | 主键约束,不能为空,具有唯一性 |
UNIQUE | 唯一约束,具有唯一性,不能为空 |
添加外键索引的语句
FOREIGN KEY (本表字段名) REFERENCES 参考表(参考字段)
给字段添加注释,使用的关键字是COMMENT
修改表
添加字段:
alter table tb_name add [column] 新字段名
修改字段
alter table tb_name change [column] 原字段名 新字段名 数据类型 [约束条件]
删除字段
alter table tb_name drop [column] 字段名
重命名表名
alter table 原表名 rename [to] 新表名
rename table 原表名1 to 新表名1
删除表
drop table tb_name
查看表
show tables [from| in db_name]
查看表结构
show columns from|in tb_name
例:
- 创建一个名为employee的职工表,字段id为主键,自增;字段num备注“工号”,具有唯一性;字段name为char类型。创建代码如下:
CREATE TABLE employee (
id INT AUTO_INCREMENT PRIMARY KEY,
num INT UNIQUE COMMENT '工号',
name CHAR(25)
);
2. 给employee表添加两个int类型的字段:sex、birth。
alter table employee add COLUMN sex int;
alter table employee add birth int;
3. 修改字段sex,数据类型改为varchar
alter table employee change column sex sex varchar(2);
数据
数据更新
增删改
插入数据:
insert into tb_name () values (values_list1)[, (values_list2)]
从数据表中查询插入
insert into tb_name () select
insert … set 插入部分列值数据
insert … select 插入 子查询数据
删除数据:
delete from tb_name [where 条件]
删除所有记录
truncate [table] tb_name
效率更高
delete是逐条删除,truncate是删除表之后建立一个一模一样的新表
更新数据:
update tb_name set column = "" where 条件
数据查询
基本语法:select * from tb_name where 条件
- group by column1 … 分组查询 ,仅在聚合函数出现时使用
- having 条件 组级条件查询,用于group by 之后
- order by column asc(升序)|desc(降序) 排序
- limit 限制查询行数
替换查询结果集中的数据:
case
when 条件1 then 表达式1
when 条件2 then 表达式2
...
else 表达式
end as col_n
连接:
-
交叉连接 (查询表有两个和两个以上、笛卡尔积)
-
内连接
最常用的连接类型
from table1 [inner] join table2 on 连接条件
- 等值连接 使用关键字 连接两个表时,比较运算符为“=”
- 非等值连接 使用关键字 连接两个表时,比较运算符不为“=”
- 自连接,与自身连接
-
外连接
- 左连接
table1 left join table2 on
(表1-》表2,如果表二中没有能匹配表1的数据,则显示为空) - 右连接
table1 right join table2 on
(表1 《- 表2 ,如果表1中没有能匹配表2的数据,则显示为空)
- 左连接
where子句与条件查询:
子查询:where 列名 in(列表或select查询语句)
比较运算符:where 列名 <比较运算符>
exist查询: where exist (select查询) 如果子查询存在则满足条件