SQL语句基础命令

db-engines.com:可以查询数据库软件使用排名

1.SQL介绍
  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是一种 ANSI 的标准计算机语言
  • 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 含义
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言
DQL 数据查询语言
2.1DDL语句功能说明
DDL 功能说明
CREATE 创建数据库结构
ALTER 修改数据库结构
DROP 删除数据库结构
RENAME 更改数据库对象的名称
TRUNCATE 删除表的全部内容

2.1.1DDL的应用
   A:对于库的应用

  • 增:创建数据库
    SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)

  • SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
| zfs                |
+--------------------+
6 rows in set (0.00 sec)

B:对于表的应用
表的属性:

表属性 含义
字符集 utf8mb4
存储引擎 InnoDB
列属性 含义
数据类型 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型
约束 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束)
其他属性 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列))
  • 数据类型:
    int:默认存储占4bytes,存储长度2^32-1
    tinyint:默认存储占1bytes,存储长度0-255)
  • 字符串类型
    char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
    varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
    enum():限定值的取值范围,比如性别(男,女,未知)等。
  • 时间类型
    datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
    timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响

 B.1 对于表的应用


  • SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
   )ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

注:建表规范
 1. 表名必须是小写,不能数字开头,和业务有关
 2. 每个表都要有主键列,可以定制无关列
 3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
 4. 每个列必须要有注释.
 5. 选择合适的数据类型
 6. 表必须设置字符集和存储引擎


  • SQL语句:
    (1)DROP TABLES stu;
    (2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
    (3)DESC stu;(查看表结构)
mysql>  drop tables stu;

  • SQL语句:
    (1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
    (2) ALTER TABLE stu DROP telephone;(删除列)
    (3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL  DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
    (4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
     COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
    (5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
    (6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎)
mysql> use zfs;        #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables;   #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu           |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field   | Type                | Null | Key | Default           | Extra          |
+---------+---------------------+------+-----+-------------------+----------------+
| id      | int(11)             | NO   | PRI | NULL              | auto_increment |
| NAME    | varchar(100)        | NO   |     | NULL              |                |
| age     | tinyint(3) unsigned | NO   |     | 99                |                |
| gender  | enum('m','f','n')   | NO   |     | n                 |                |
| shijian | timestamp           | NO   |     | CURRENT_TIMESTAMP |                |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu;      #查看建表的时候SQL语句,和表的备注信息

| stu   | CREATE TABLE `stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `NAME` varchar(100) NOT NULL COMMENT '姓名',
  `age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
  `gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
  `shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML 功能说明
SELECT 从表或视图中检索数据行
INSERT 插入数据到表或视图
UPDATE 更新数据
DELETE 删除数据
CALL 调用过程
MERGE 合并(插入或修改)
COMMIT 将当前事务所做的更改永久化(写入数据库)
ROLLBACK 取消上次提交以来的所有操作

A.针对数据行进行操作


  • (1)对应行信息录入
    INSERT INTO stu(NAME,age,sex)
    VALUES('zhang3',11,'m');
    (2)根据表格的顺序录入
    INSERT INTO stu
    VALUES(2,'ls',18,'m',NOW();
    (3)批量录入
    INSERT INTO
    stu(NAME,age,sex)
    VALUES
    ('zs',12,'m'),
    ('w5',14,'f'),
    ('ss',19,'f');

  • (1)删除zhang3这一列
    DELETE FROM stu WHERE NAME='zhang3';

  • (1)将ls的年龄修改为28
    UPDATE stu SET age=28 WHERE NAME='ls'

  • (1)查表的内容
    SELECT * FROM stu;
    (2)根据条件筛选
    SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL 功能说明
CRANT 授予其他用户对数据库结构的访问权限
REVOKE 收回用户访问数据库结构的权限
2.4DCQL语句功能说明
DQL 功能说明
select 查询
show 查询
2.4.1 select

A.select单独使用(mysql)

mysql>   select@@port;      #查询my.cf参数信息
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set (0.00 sec)

B.select配合函数使用

mysql>  select now();   #select配合函数
+---------------------+
| now()               |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008');             #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008           |
+----------------+
1 row in set (0.00 sec)

mysql> select concat(user,"@",host) from mysql.user;     #select拼接
+-------------------------+
| concat(user,"@",host)   |
+-------------------------+
| app@10.0.0.%            |
| root@10.0.0.%           |
| zfs@10.0.0.%            |
| mysql.session@localhost |
| mysql.sys@localhost     |
| root@localhost          |
+-------------------------+
6 rows in set (0.00 sec)

mysql> select group_concat(user,"@",host) from mysql.user;  #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host)                                                                        |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

C.select配合字句使用
  select 单表子句的顺序:
1.select  2.from  3.where  4.group by  5.having   6.order by   7.limit   8.union all

C.1from字句的应用

子句 含义
SELECT * FROM city; 查询city表中所用数据
SELECT NAME ,CountryCode FROM city; 查询city表中的某两列

C.2where字句的应用

子句 含义 分类
SELECT * FROM city WHERE countrycode='CHN'; 查询中国所有的城市信息 WHERE 配合等值查询
SELECT * FROM city WHERE population<100; 查询人口数量少于100人的城市信息 WHERE 配合不等值(> < >= <= )
SELECT*FROM city WHERE countrycode LIKE 'CH%'; 查询一下国家代号是CH打头的城市信息 WHERE 配合 LIKE 模糊查询
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; 查询一下中国人口数量大于500w的城市信息 WHERE 配合逻辑连接符(AND OR)
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; 查询世界上,人口数在100w-200w之间的城市 WHERE 配合 BETWEEN AND语句的应用
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); 查询中国或美国的城市信息 WHERE 配合 in 使用

C.3ROUP BY聚合函数应用
db-engines.com:可以查询数据库软件使用排名

1.SQL介绍
  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是一种 ANSI 的标准计算机语言
  • 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 含义
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言
DQL 数据查询语言
2.1DDL语句功能说明
DDL 功能说明
CREATE 创建数据库结构
ALTER 修改数据库结构
DROP 删除数据库结构
RENAME 更改数据库对象的名称
TRUNCATE 删除表的全部内容

2.1.1DDL的应用
   A:对于库的应用

  • 增:创建数据库
    SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)

  • SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
| zfs                |
+--------------------+
6 rows in set (0.00 sec)

B:对于表的应用
表的属性:

表属性 含义
字符集 utf8mb4
存储引擎 InnoDB
列属性 含义
数据类型 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型
约束 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束)
其他属性 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列))
  • 数据类型:
    int:默认存储占4bytes,存储长度2^32-1
    tinyint:默认存储占1bytes,存储长度0-255)
  • 字符串类型
    char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
    varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
    enum():限定值的取值范围,比如性别(男,女,未知)等。
  • 时间类型
    datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
    timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响

 B.1 对于表的应用


  • SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
   )ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

注:建表规范
 1. 表名必须是小写,不能数字开头,和业务有关
 2. 每个表都要有主键列,可以定制无关列
 3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
 4. 每个列必须要有注释.
 5. 选择合适的数据类型
 6. 表必须设置字符集和存储引擎


  • SQL语句:
    (1)DROP TABLES stu;
    (2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
    (3)DESC stu;(查看表结构)
mysql>  drop tables stu;

  • SQL语句:
    (1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
    (2) ALTER TABLE stu DROP telephone;(删除列)
    (3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL  DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
    (4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
     COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
    (5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
    (6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎)
mysql> use zfs;        #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables;   #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu           |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field   | Type                | Null | Key | Default           | Extra          |
+---------+---------------------+------+-----+-------------------+----------------+
| id      | int(11)             | NO   | PRI | NULL              | auto_increment |
| NAME    | varchar(100)        | NO   |     | NULL              |                |
| age     | tinyint(3) unsigned | NO   |     | 99                |                |
| gender  | enum('m','f','n')   | NO   |     | n                 |                |
| shijian | timestamp           | NO   |     | CURRENT_TIMESTAMP |                |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu;      #查看建表的时候SQL语句,和表的备注信息

| stu   | CREATE TABLE `stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `NAME` varchar(100) NOT NULL COMMENT '姓名',
  `age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
  `gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
  `shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML 功能说明
SELECT 从表或视图中检索数据行
INSERT 插入数据到表或视图
UPDATE 更新数据
DELETE 删除数据
CALL 调用过程
MERGE 合并(插入或修改)
COMMIT 将当前事务所做的更改永久化(写入数据库)
ROLLBACK 取消上次提交以来的所有操作

A.针对数据行进行操作


  • (1)对应行信息录入
    INSERT INTO stu(NAME,age,sex)
    VALUES('zhang3',11,'m');
    (2)根据表格的顺序录入
    INSERT INTO stu
    VALUES(2,'ls',18,'m',NOW();
    (3)批量录入
    INSERT INTO
    stu(NAME,age,sex)
    VALUES
    ('zs',12,'m'),
    ('w5',14,'f'),
    ('ss',19,'f');

  • (1)删除zhang3这一列
    DELETE FROM stu WHERE NAME='zhang3';

  • (1)将ls的年龄修改为28
    UPDATE stu SET age=28 WHERE NAME='ls'

  • (1)查表的内容
    SELECT * FROM stu;
    (2)根据条件筛选
    SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL 功能说明
CRANT 授予其他用户对数据库结构的访问权限
REVOKE 收回用户访问数据库结构的权限
2.4DCQL语句功能说明
DQL 功能说明
select 查询
show 查询
2.4.1 select

A.select单独使用(mysql)

mysql>   select@@port;      #查询my.cf参数信息
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set (0.00 sec)

B.select配合函数使用

mysql>  select now();   #select配合函数
+---------------------+
| now()               |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008');             #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008           |
+----------------+
1 row in set (0.00 sec)

mysql> select concat(user,"@",host) from mysql.user;     #select拼接
+-------------------------+
| concat(user,"@",host)   |
+-------------------------+
| app@10.0.0.%            |
| root@10.0.0.%           |
| zfs@10.0.0.%            |
| mysql.session@localhost |
| mysql.sys@localhost     |
| root@localhost          |
+-------------------------+
6 rows in set (0.00 sec)

mysql> select group_concat(user,"@",host) from mysql.user;  #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host)                                                                        |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

C.select配合字句使用
  select 单表子句的顺序:
1.select  2.from  3.where  4.group by  5.having   6.order by   7.limit   8.union all

C.1from字句的应用

子句 含义
SELECT * FROM city; 查询city表中所用数据
SELECT NAME ,CountryCode FROM city; 查询city表中的某两列

C.2where字句的应用

子句 含义 分类
SELECT * FROM city WHERE countrycode='CHN'; 查询中国所有的城市信息 WHERE 配合等值查询
SELECT * FROM city WHERE population<100; 查询人口数量少于100人的城市信息 WHERE 配合不等值(> < >= <= )
SELECT*FROM city WHERE countrycode LIKE 'CH%'; 查询一下国家代号是CH打头的城市信息 WHERE 配合 LIKE 模糊查询
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; 查询一下中国人口数量大于500w的城市信息 WHERE 配合逻辑连接符(AND OR)
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; 查询世界上,人口数在100w-200w之间的城市 WHERE 配合 BETWEEN AND语句的应用
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); 查询中国或美国的城市信息 WHERE 配合 in 使用

C.3ROUP BY聚合函数应用
db-engines.com:可以查询数据库软件使用排名

1.SQL介绍
  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是一种 ANSI 的标准计算机语言
  • 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 含义
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言
DQL 数据查询语言
2.1DDL语句功能说明
DDL 功能说明
CREATE 创建数据库结构
ALTER 修改数据库结构
DROP 删除数据库结构
RENAME 更改数据库对象的名称
TRUNCATE 删除表的全部内容

2.1.1DDL的应用
   A:对于库的应用

  • 增:创建数据库
    SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)

  • SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
| zfs                |
+--------------------+
6 rows in set (0.00 sec)

B:对于表的应用
表的属性:

表属性 含义
字符集 utf8mb4
存储引擎 InnoDB
列属性 含义
数据类型 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型
约束 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束)
其他属性 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列))
  • 数据类型:
    int:默认存储占4bytes,存储长度2^32-1
    tinyint:默认存储占1bytes,存储长度0-255)
  • 字符串类型
    char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
    varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
    enum():限定值的取值范围,比如性别(男,女,未知)等。
  • 时间类型
    datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
    timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响

 B.1 对于表的应用


  • SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
   )ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

注:建表规范
 1. 表名必须是小写,不能数字开头,和业务有关
 2. 每个表都要有主键列,可以定制无关列
 3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
 4. 每个列必须要有注释.
 5. 选择合适的数据类型
 6. 表必须设置字符集和存储引擎


  • SQL语句:
    (1)DROP TABLES stu;
    (2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
    (3)DESC stu;(查看表结构)
mysql>  drop tables stu;

  • SQL语句:
    (1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
    (2) ALTER TABLE stu DROP telephone;(删除列)
    (3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL  DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
    (4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
     COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
    (5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
    (6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎)
mysql> use zfs;        #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables;   #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu           |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field   | Type                | Null | Key | Default           | Extra          |
+---------+---------------------+------+-----+-------------------+----------------+
| id      | int(11)             | NO   | PRI | NULL              | auto_increment |
| NAME    | varchar(100)        | NO   |     | NULL              |                |
| age     | tinyint(3) unsigned | NO   |     | 99                |                |
| gender  | enum('m','f','n')   | NO   |     | n                 |                |
| shijian | timestamp           | NO   |     | CURRENT_TIMESTAMP |                |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu;      #查看建表的时候SQL语句,和表的备注信息

| stu   | CREATE TABLE `stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `NAME` varchar(100) NOT NULL COMMENT '姓名',
  `age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
  `gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
  `shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML 功能说明
SELECT 从表或视图中检索数据行
INSERT 插入数据到表或视图
UPDATE 更新数据
DELETE 删除数据
CALL 调用过程
MERGE 合并(插入或修改)
COMMIT 将当前事务所做的更改永久化(写入数据库)
ROLLBACK 取消上次提交以来的所有操作

A.针对数据行进行操作


  • (1)对应行信息录入
    INSERT INTO stu(NAME,age,sex)
    VALUES('zhang3',11,'m');
    (2)根据表格的顺序录入
    INSERT INTO stu
    VALUES(2,'ls',18,'m',NOW();
    (3)批量录入
    INSERT INTO
    stu(NAME,age,sex)
    VALUES
    ('zs',12,'m'),
    ('w5',14,'f'),
    ('ss',19,'f');

  • (1)删除zhang3这一列
    DELETE FROM stu WHERE NAME='zhang3';

  • (1)将ls的年龄修改为28
    UPDATE stu SET age=28 WHERE NAME='ls'

  • (1)查表的内容
    SELECT * FROM stu;
    (2)根据条件筛选
    SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL 功能说明
CRANT 授予其他用户对数据库结构的访问权限
REVOKE 收回用户访问数据库结构的权限
2.4DCQL语句功能说明
DQL 功能说明
select 查询
show 查询
2.4.1 select

A.select单独使用(mysql)

mysql>   select@@port;      #查询my.cf参数信息
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set (0.00 sec)

B.select配合函数使用

mysql>  select now();   #select配合函数
+---------------------+
| now()               |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008');             #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008           |
+----------------+
1 row in set (0.00 sec)

mysql> select concat(user,"@",host) from mysql.user;     #select拼接
+-------------------------+
| concat(user,"@",host)   |
+-------------------------+
| app@10.0.0.%            |
| root@10.0.0.%           |
| zfs@10.0.0.%            |
| mysql.session@localhost |
| mysql.sys@localhost     |
| root@localhost          |
+-------------------------+
6 rows in set (0.00 sec)

mysql> select group_concat(user,"@",host) from mysql.user;  #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host)                                                                        |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

C.select配合字句使用
  select 单表子句的顺序:
1.select  2.from  3.where  4.group by  5.having   6.order by   7.limit   8.union all

C.1from字句的应用

子句 含义
SELECT * FROM city; 查询city表中所用数据
SELECT NAME ,CountryCode FROM city; 查询city表中的某两列

C.2where字句的应用

子句 含义 分类
SELECT * FROM city WHERE countrycode='CHN'; 查询中国所有的城市信息 WHERE 配合等值查询
SELECT * FROM city WHERE population<100; 查询人口数量少于100人的城市信息 WHERE 配合不等值(> < >= <= )
SELECT*FROM city WHERE countrycode LIKE 'CH%'; 查询一下国家代号是CH打头的城市信息 WHERE 配合 LIKE 模糊查询
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; 查询一下中国人口数量大于500w的城市信息 WHERE 配合逻辑连接符(AND OR)
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; 查询世界上,人口数在100w-200w之间的城市 WHERE 配合 BETWEEN AND语句的应用
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); 查询中国或美国的城市信息 WHERE 配合 in 使用

C.3ROUP BY聚合函数应用
db-engines.com:可以查询数据库软件使用排名

1.SQL介绍
  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是一种 ANSI 的标准计算机语言
  • 编者注:ANSI,美国国家标准化组织
2.SQL分类
分类 含义
DDL 数据定义语言
DCL 数据控制语言
DML 数据操作语言
DQL 数据查询语言
2.1DDL语句功能说明
DDL 功能说明
CREATE 创建数据库结构
ALTER 修改数据库结构
DROP 删除数据库结构
RENAME 更改数据库对象的名称
TRUNCATE 删除表的全部内容

2.1.1DDL的应用
   A:对于库的应用

  • 增:创建数据库
    SQL语句:CREATE DATABASE zfs CHARSET utf8mb4;
mysql> create database oldboy charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:DROP DATABASE zfs;
mysql> drop database oldboy;
Query OK, 0 rows affected (0.00 sec)

  • SQL语句:ALTER DATABASE zfs CHARSET utf8;
mysql> alter database zfs charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

  • SQL语句:SHOW DATABASES;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
| zfs                |
+--------------------+
6 rows in set (0.00 sec)

B:对于表的应用
表的属性:

表属性 含义
字符集 utf8mb4
存储引擎 InnoDB
列属性 含义
数据类型 1.数字类型 2.字符串类型 3.时间类型 4.二进制类型 5.时间类型
约束 1.primary key(非空且唯一,每张表只能有一个)2.not null(非空约束) 3.unique key(唯一约束)
其他属性 1.unsigned (对于数字列 ,非负数)2.default(默认值)3.auto_increment (自增长)4.comment(注释(表,列))
  • 数据类型:
    int:默认存储占4bytes,存储长度2^32-1
    tinyint:默认存储占1bytes,存储长度0-255)
  • 字符串类型
    char(10):括号里定义最大字符长度,最多可以存255个字符,定长,(10)定义的是10个字符,实际所占的字符是10个字符,如果小于是则系统会默认填充。
    varchar(10):括号里定义最大字符长度,最多可以存65535个字符,可变长,按需分配磁盘空间。
    enum():限定值的取值范围,比如性别(男,女,未知)等。
  • 时间类型
    datetime:范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
    timestamp: 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999,timestamp会受到时区的影响

 B.1 对于表的应用


  • SQL语句:建表
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(100) NOT NULL COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 99 COMMENT '年龄' ,
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
shijian TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
   )ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

注:建表规范
 1. 表名必须是小写,不能数字开头,和业务有关
 2. 每个表都要有主键列,可以定制无关列
 3. 每个列要非空约束,可以定制默认值,数字列用0填充,字符串列null填充
 4. 每个列必须要有注释.
 5. 选择合适的数据类型
 6. 表必须设置字符集和存储引擎


  • SQL语句:
    (1)DROP TABLES stu;
    (2)TRUNCATE TABLES stu;(只清空表格内容,不删除表结构)
    (3)DESC stu;(查看表结构)
mysql>  drop tables stu;

  • SQL语句:
    (1)ALTER TABLE stu ADD telephone CHAR(11) NOT NULL COMMENT'联系方式';
    (2) ALTER TABLE stu DROP telephone;(删除列)
    (3)ALTER TABLE stu CHANGE gender sex CHAR(1) NOT NULL  DEFAULT 'n' COMMENT '性别'(改某一列的名称或属性)
    (4)ALTER TABLE stu ADD telnum CHAR(11) NOT NULL UNIQUE KEY
     COMMENT '手机号' AFTER NAME;(在某一列后插入新的一列)
    (5)ALTER TABLE stu CHARSET utf8;(更改表的字符集)
    (6)ALTER TABLE stu ENGINE=INNODB;(更改表的存储引擎)
mysql> use zfs;        #进入zfs库
mysql> use zfs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables;   #查所有表
+---------------+
| Tables_in_zfs |
+---------------+
| stu           |
+---------------+
1 row in set (0.00 sec)
mysql> desc stu; 查stu表的属性信息
+---------+---------------------+------+-----+-------------------+----------------+
| Field   | Type                | Null | Key | Default           | Extra          |
+---------+---------------------+------+-----+-------------------+----------------+
| id      | int(11)             | NO   | PRI | NULL              | auto_increment |
| NAME    | varchar(100)        | NO   |     | NULL              |                |
| age     | tinyint(3) unsigned | NO   |     | 99                |                |
| gender  | enum('m','f','n')   | NO   |     | n                 |                |
| shijian | timestamp           | NO   |     | CURRENT_TIMESTAMP |                |
+---------+---------------------+------+-----+-------------------+----------------+
5 rows in set (0.00 sec)
mysql> show create table stu;      #查看建表的时候SQL语句,和表的备注信息

| stu   | CREATE TABLE `stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `NAME` varchar(100) NOT NULL COMMENT '姓名',
  `age` tinyint(3) unsigned NOT NULL DEFAULT '99' COMMENT '年龄',
  `gender` enum('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
  `shijian` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入学时间',
2.2DML语句功能说明
DML 功能说明
SELECT 从表或视图中检索数据行
INSERT 插入数据到表或视图
UPDATE 更新数据
DELETE 删除数据
CALL 调用过程
MERGE 合并(插入或修改)
COMMIT 将当前事务所做的更改永久化(写入数据库)
ROLLBACK 取消上次提交以来的所有操作

A.针对数据行进行操作


  • (1)对应行信息录入
    INSERT INTO stu(NAME,age,sex)
    VALUES('zhang3',11,'m');
    (2)根据表格的顺序录入
    INSERT INTO stu
    VALUES(2,'ls',18,'m',NOW();
    (3)批量录入
    INSERT INTO
    stu(NAME,age,sex)
    VALUES
    ('zs',12,'m'),
    ('w5',14,'f'),
    ('ss',19,'f');

  • (1)删除zhang3这一列
    DELETE FROM stu WHERE NAME='zhang3';

  • (1)将ls的年龄修改为28
    UPDATE stu SET age=28 WHERE NAME='ls'

  • (1)查表的内容
    SELECT * FROM stu;
    (2)根据条件筛选
    SELECT * FROM stu WHERE age=1;
2.3DCL语句功能说明
DCL 功能说明
CRANT 授予其他用户对数据库结构的访问权限
REVOKE 收回用户访问数据库结构的权限
2.4DCQL语句功能说明
DQL 功能说明
select 查询
show 查询
2.4.1 select

A.select单独使用(mysql)

mysql>   select@@port;      #查询my.cf参数信息
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set (0.00 sec)

B.select配合函数使用

mysql>  select now();   #select配合函数
+---------------------+
| now()               |
+---------------------+
| 2019-08-16 15:19:00 |
+---------------------+
1 row in set (0.00 sec)
mysql> select concat('2008');             #将字符打印
+----------------+
| concat('2008') |
+----------------+
| 2008           |
+----------------+
1 row in set (0.00 sec)

mysql> select concat(user,"@",host) from mysql.user;     #select拼接
+-------------------------+
| concat(user,"@",host)   |
+-------------------------+
| app@10.0.0.%            |
| root@10.0.0.%           |
| zfs@10.0.0.%            |
| mysql.session@localhost |
| mysql.sys@localhost     |
| root@localhost          |
+-------------------------+
6 rows in set (0.00 sec)

mysql> select group_concat(user,"@",host) from mysql.user;  #将列转成行显示
+----------------------------------------------------------------------------------------------------+
| group_concat(user,"@",host)                                                                        |
+----------------------------------------------------------------------------------------------------+
| app@10.0.0.%,root@10.0.0.%,zfs@10.0.0.%,mysql.session@localhost,mysql.sys@localhost,root@localhost |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

C.select配合字句使用
  select 单表子句的顺序:
1.select  2.from  3.where  4.group by  5.having   6.order by   7.limit   8.union all

C.1from字句的应用

子句 含义
SELECT * FROM city; 查询city表中所用数据
SELECT NAME ,CountryCode FROM city; 查询city表中的某两列

C.2where字句的应用

子句 含义 分类
SELECT * FROM city WHERE countrycode='CHN'; 查询中国所有的城市信息 WHERE 配合等值查询
SELECT * FROM city WHERE population<100; 查询人口数量少于100人的城市信息 WHERE 配合不等值(> < >= <= )
SELECT*FROM city WHERE countrycode LIKE 'CH%'; 查询一下国家代号是CH打头的城市信息 WHERE 配合 LIKE 模糊查询
SELECT * FROM city WHERE countrycode='CHN' AND population>5000000; 查询一下中国人口数量大于500w的城市信息 WHERE 配合逻辑连接符(AND OR)
SELECT * FROM city WHERE population BETWEEN 1000000 AND 2000000; 查询世界上,人口数在100w-200w之间的城市 WHERE 配合 BETWEEN AND语句的应用
SELECT * FROM city WHERE countrycode IN ('CHN','USA'); 查询中国或美国的城市信息 WHERE 配合 in 使用

C.3ROUP BY聚合函数应用
常用函数

函数 含义
COUNT() 统计行数或个数
SUM() 求和
MIN() 求最小值
MAX() 求最大值
AVG() 平均值
GROUP_CONCAT() 主要用来处理一对多的查询结果,通常会结合GROUP BY一起使用
子句 含义
SELECT countrycode,COUNT(NAME) FROM cityGROUP BY countrycode; 统计一下每个国家的城市个数
SELECT countrycode,COUNT(NAME) ,GROUP_CONCAT(NAME) FROM cityGROUP BY countrycode; 统计一下每个国家城市名列表
SELECT countrycode , COUNT(DISTINCT district) FROM city GROUP BY countrycode; 统计一下每个国家的省的个数
SELECT countrycode ,SUM(population) FROM city GROUP BY countrycode; 统计一下每个国家的总人口数

C.4having语句的使用
**在group by执行后过滤 **

例:统计一下每个国家的人口数量
SQL语句:
USE world;
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20;

C.5order by语句的使用
将过滤后的列表进行排序操作,默认是从小到大,从大到小加desc

SQL语句默认从小到大:
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district);
SQL语句从大到小:
SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC;

C6.limit语句的使用
分页显示
例:显示前10行

SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 10;

例:显示11-15行

SELECT countrycode,COUNT(DISTINCT district) FROM city
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 10,5;  #10,5的意识是跳过前10行,最多显示5行

C7.union all语句的使用
将多个结果集显示并列成一个
列:看地10行和第15行

SQL语句:
(SELECT countrycode , COUNT(DISTINCT district) FROM city 
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 9,1) 
UNION ALL  
(SELECT countrycode , COUNT(DISTINCT district) FROM city 
GROUP BY countrycode
HAVING COUNT(DISTINCT district)>20
ORDER BY COUNT(DISTINCT district) DESC LIMIT 14,1)

3.通过添加状态列实现伪删除

(1) 添加状态列
ALTER TABLE stu ADD state TINYINT NOT NULL DEFAULT 1;
(2) 删除行
原语句:
DELETE FROM stu WHERE NAME='ls';
改写为:
UPDATE stu SET state=0 WHERE NAME='ls';
(3)查询检查
SELECT * FROM stu WHERE state=1;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容