一、基本概念

启动MySQL服务

$ sudo service mysql start
或者
/etc/init.d/mysql start

数据的排序与分组语句

目录

  1.数据库:

  数据库(DataBase)就是一个存储数据的仓库,为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。数据库是数据管理软件。数据存储分为三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。

使用root用户登陆

$ mysql -u 用户名 -p

-p表示使用密码登录

 

      • 启动MySQL服务
      • 使用root用户登陆
      • 查看命令帮助信息
      • 查看授予用户的安全权限
      • 注释
      • 取消正在输入的命令
      • 查看当前含有哪些数据库
      • 连接数据库
      • 查看当前数据库中含有哪些表
      • 显示表属性
      • 显示服务器警告或错误信息
      • 退出数据库
      • 新建数据库
      • 新建数据表
      • 数据类型
        • CHAR和VARCHAR的区别
        • ENUM和SET的区别
      • 插入数据
      • SQL约束
        • 主键
        • 外键
        • 非空约束
        • 默认值约束
        • 唯一约束
      • MySQL通配符
      • MySQL查询语句关键字顺序
      • SELECT操作
        • 查看表中所有的内容
        • SELECT基本格式
        • 对查询结果排序
        • 去除重复值
        • 限制返回结果数
        • 内置函数和计算
        • 子查询
        • 连接查询
      • 删除数据库
      • 重命名数据表
      • 删除数据表
      • 在表中增加列
      • 删除列
      • 修改列
      • 修改数据类型
      • 修改表中某个值
      • 删除某行记录
      • 为某列建立索引
      • 显示某表的索引
      • 创建视图一种虚拟存在的表
      • 导入将文件中的数据保存进表
      • 导出将表中数据保存到文件中
      • 备份整个数据库
      • 备份整个表
      • 恢复数据库
      • 正则表达式
      • 空白元字符
      • 字符类预定义字符集
      • 匹配多个实例
      • 定位元字符
      • 拼接字段
      • 别名alias
      • MySQL算数操作符
      • SELECT测试
      • SQL函数
      • 常用的文本处理函数
      • 日期和时间处理函数
      • 数值处理函数
      • SQL聚集函数
      • 分组数据
        • WHERE 和
          HAVING
        • GROUP BY 和 ORDER
          BY
      • SELECT子句顺序
      • 子查询

  2.数据库范式:

  数据库范式即数据库应该遵循的规则。目前关系数据库最常用的四种范式分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCN范式(BCNF)。

  第一范式:无重复的域。即数据库表的每一列都是不可分割的原子数据项,而不是集合、数组、记录等非原子数据项。

  第二范式:数据库表中的所有列都必须依赖于主键,这意味着一个表只描述一件事情。

  第三范式:表中的每一列只与主键直接相关而不是间接相关。

  BCN范式:Boyce-Codd,不允许出现有主键的一部分被主键另一部分或者其他部分决定。即一个表中只能有一个主键。

  举例(摘自其他博客)说明BCN:

  假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID,
数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

    (仓库ID, 存储物品ID) →(管理员ID, 数量)

    (管理员ID, 存储物品ID) → (仓库ID, 数量)

  所以,(仓库ID, 存储物品ID)和(管理员ID,
存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

    (仓库ID) → (管理员ID)

    (管理员ID) → (仓库ID)

  即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。

查看命令帮助信息

mysql> HELP 命令名;

使用SQL语句执行查询操作时,我们可能发现查询出的数据结果的排序是无序的。为了更好的观察数据表中的查询结果,开发人员或者用户经常要对查询的数据进行排序操作,这就需要使用ORDER
BY子句。在数据库的实际应用中,有时需要对查询的数据进行统计和分组操作,这就需要了解SQL语句的聚合函数和GROUP
BY子句的使用。有些时候开发人员或者用户还希望对分组后的结果做进一步的统计,在SQL语句中提供了ROLLUP这样一个关键字用来对数据进行统计。最后还将介绍主要数据库中如何限制结果集的行数。

启动MySQL服务

$ sudo service mysql start

  3.数据库系统和数据库管理系统:

  数据库系统由数据库、数据库管理系统、应用开发工具构成。

  数据库管理系统(DataBase Management System,
DBMS)是用来定义、管理和维护数据的软件。它是数据库系统的重要组成部分。数据库管理系统通过SQL语言来管理数据库中的数据。

查看授予用户的安全权限

mysql> SHOW GRANTS;

 

使用root用户登陆

$ mysql -u 用户名 -p

-p表示使用密码登录

  4.SQL语言:

  SQL(Structured Query Language)语言的全称是结构化查询语言。它包括:

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

    - 数据操作语言(Data Manipulation Language, DML)

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

注释

-- 单行注释
/* 多行注释 */

1.使用ORDER BY子句对数据记录进行排序

查看命令帮助信息

mysql> HELP 命令名;

  5.MySQL数据库版本和优势:

取消正在输入的命令

\c

 

查看授予用户的安全权限

mysql> SHOW GRANTS;

  常见数据库

  商业数据库:甲骨文的Oracle、IBM的DB2、微软的Access和SQL
Server。开源数据库:PostgreSQL、MySQL。

查看当前含有哪些数据库

mysql> SHOW DATABASES;

指定表中的一列进行排序 

注释

-- 单行注释

/* 多行注释 */

  版本分类

  根据操作系统:Windows版,UNIX版,Linux版,MacOS版;根据开发情况:Alpha、Beta、Gamma与Available(GA)。

  alpha
暗示这是一个以展示新特性为目的的版本,存在比较多的不稳定因素,还会向代码中添加新新特性

  beta
以后的beta版、发布版或产品发布中,所有API、外部可视结构和SQL命令列均不再更改,不再向代码中添加影响代码稳定性的新特性。Gamma比Beta版更高级。

  GA如果没有后缀,则暗示这是一个大多数情况下可用版本或者是产品版本。.
GA releases则是稳定版。

  优势:MySQL开放源码、跨平台性、价格优势、功能强大且使用方便。

连接数据库

mysql> USE 数据库名

通过ORDER BY
子句可以对查询结果中指定的列进行升序或者是降序操作,这取决于ORDER
BY子句后的关键字,如果ORDER
BY子句后面的关键字是ASC,则对查询的结果执行升序操作;如果ORDER
BY子句后面的关键字是DESC,则对查询的结果执行降序操作。其语法规则如下 

取消正在输入的命令

\c

  Linux安装MySQL

  

查看当前数据库中含有哪些表

mysql> SHOW TABLES;

mysql> DESCRIBE 表名;

ORDER BY 列名1 [ASC|DESC] 

查看当前含有哪些数据库

mysql> SHOW DATABASES;

二、MySQL数据类型(摘自菜鸟教程:

  MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

显示表属性

mysql> SHOW COLUMNS FROM 表名;

该命令将会输出指定表的每个字段的字段名、数据类型、非空约束、是否是主键和默认值等信息。

其中列名1表示需要对该列进行排序操作。关键字ASC和DESC是可选的。如果ORDER
BY 子句后面不写ASC或者是DESC,则默认执行的是升序操作。 

连接数据库

mysql> USE 数据库名

  1.整数类型的存储和范围

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

显示服务器警告或错误信息

mysql> SHOW ERRORS;

mysql> SHOW WARNINGS;

 

查看当前数据库中含有哪些表

mysql> SHOW TABLES;

mysql> DESCRIBE 表名;

  2.日期和时间类型

类型 大小 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/’838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS 混合日期和时间值,时间戳

退出数据库

mysql> EXIT/QUIT;

 

显示表属性

mysql> SHOW COLUMNS FROM 表名;

该命令将会输出指定表的每个字段的字段名、数据类型、非空约束、是否是主键和默认值等信息。

  3.字符串类型

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
TINYBLOB  0-255字节  不超过 255 个字符的二进制字符串
BLOB 0-65 535字节 二进制形式的长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据

新建数据库

mysql> CREATE DATABASE 数据库名;

通常SQL语句不区分大小写,但建议将关键字大写,变量和数据小写。

SELECT teaID,teaName,dept,profession,salary

显示服务器警告或错误信息

mysql> SHOW ERRORS;

mysql> SHOW WARNINGS;

三、MySQL表操作

新建数据表

mysql> CREATE TABLE 数据表名
    -> (
    -> 列名1 数据类型(数据长度) PRIMARY KEY,        --主键
    -> 列名2 数据类型(数据长度) NOT NULL,        --非空约束
    -> 列名3 数据类型(数据长度) DEFAULT '默认值',        --默认值约束
    -> UNIQUE(列名a),        --唯一约束
    -> CONSTRAINT 主键名 PRIMARY KEY (列名a,列名b,...),        --复合主键
    -> CONSTRAINT 外键名 FOREIGN KEY (列名) REFERENCES 表名(主键名)        --外键
    -> );

注意最后一个列名后面不加逗号”,”。

FROM T_teacher 

退出数据库

mysql> EXIT/QUIT;

  1.插入数据 INSERT INTO

-- 插入一条新的数据
/* INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) VALUES('10006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL); */
-- 按表列字段的顺序插入数据时,列字段可省略
INSERT INTO customers VALUES('10006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
-- 将一张表插入到原来的表
/* INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)  SELECT cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email FROM cust_new WHERE cust_id NOT IN (SELECT cust_id FROM customers); */
-- 复制表
CREATE TABLE custcopy AS SELECT * FROM customers;

  注意:

  - 任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY。

  - 可以联结多个表执行插入数据操作。

  - 不管从多少个表中检索数据,数据都只能插入到单个表中。

数据类型

数据类型 大小(字节) 用途 格式
INT 4 整数
FLOAT 4 单精度浮点数
DOUBLE 4 双精度浮点数
ENUM 单选 ENUM(‘a’,’b’,’c’)
SET 多选 SET(‘1’,’2’,’3’)
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定长字符串
VARCHAR 0~255 变长字符串
TEXT 0~65535 长文本数据

WHERE dept =’计算机系’

新建数据库

mysql> CREATE DATABASE 数据库名;

通常SQL语句不区分大小写,但建议将关键字大写,变量和数据小写。

  2.更新和删除数据 UPDARE DEL

  UPDATE可以:更新表中特定行,更新表中所有行。在没有where子句时,UPDATE会更新所有记录。

-- UPDATE总以要更新的表的名字开始,以SET指明一个或多个要更新的字段,以WHERE指定要更新的记录
UPDATE customers SET cust_email = 'kim@thetoystore.com' WHERE cust_id = '10005';
UPDATE customers SET cust_contact = 'Sam Roberts', cust_email = 'sam@toyloand.com' WHERE cust_id = '10006';
-- 设置NULL来删除某个列的值
UPDATE customers SET cust_email = NULL WHERE cust_id = '10005';

-- DELETE是删除列
DELETE FROM customers WHERE cust_id = '10006';

  DELETE用于按行删除记录,它本身不会修改表结构。

  注:在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,以保证它过滤的是确实要删除的记录。

CHAR和VARCHAR的区别:

CHAR的长度是固定的,而VARCHAR的长度是可以变化的。

比如,存储字符串"abc",对于CHAR
(10),表示存储的字符将占10个字节(包括7个空字符),

而同样的VARCHAR(12)则只占用3个字节的长度,12只是最大值,

当你存储的字符小于12时,按实际长度存储。

ORDER BY salary ASC

新建数据表

mysql> CREATE TABLE 数据表名
    -> (
    -> 列名1 数据类型(数据长度) PRIMARY KEY,        --主键
    -> 列名2 数据类型(数据长度) NOT NULL,        --非空约束
    -> 列名3 数据类型(数据长度) DEFAULT '默认值',        --默认值约束
    -> UNIQUE(列名a),        --唯一约束
    -> CONSTRAINT 主键名 PRIMARY KEY (列名a,列名b,...),        --复合主键
    -> CONSTRAINT 外键名 FOREIGN KEY (列名) REFERENCES 表名(主键名)        --外键
    -> );

注意最后一个列名后面不加逗号”,”。

   3.创建表及约束条件

ENUM和SET的区别:

ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。

 

数据类型

数据类型 大小(字节) 用途 格式
INT 4 整数
FLOAT 4 单精度浮点数
DOUBLE 4 双精度浮点数
ENUM 单选 ENUM(‘a’,’b’,’c’)
SET 多选 SET(‘1’,’2’,’3’)
DATE 3 日期 YYYY-MM-DD
TIME 3 时间点或持续时间 HH:MM:SS
YEAR 1 年份值 YYYY
CHAR 0~255 定长字符串
VARCHAR 0~255 变长字符串
TEXT 0~65535 长文本数据

  1.创建表

-- 创建表语法:CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,...);
CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), salary FLOAT(8,2) UNSIGNED);
-- 查看表结构
DESC users;
SHOW COLUMNS FROM users;
SHOW CREATE TABLE users;

插入数据

INSERT INTO 数据表名(列名1,列名2,列名3) VALUES(值1,值2,值3);

VALUES中的值为对应列属性的值,其中CHAR,VARCHAR,TEXT,DATE,TIME,ENUM等类型的数据需要单引号修饰。

指定表中列的位置序号进行排序 

CHAR和VARCHAR的区别:

CHAR的长度是固定的,而VARCHAR的长度是可以变化的。

比如,存储字符串"abc",对于CHAR
(10),表示存储的字符将占10个字节(包括7个空字符),

而同样的VARCHAR(12)则只占用3个字节的长度,12只是最大值,

当你存储的字符小于12时,按实际长度存储。

  2.约束条件

  约束是为了保证数据的完整性和一致性,约束类型包括:

 键名  类型
PRIMARY KEY 主键约束
UNIQUE KEY 唯一约束
NOT NULL 非空约束
UNSIGNED 无符号约束
DEFAULT 默认约束
FOREIGN KEY 外键约束

 

SQL约束

排在使用ORDER
BY子句进行排序操作时,除了可以使用列名对指定列进行序,也可以使用该列在选择列表中的位置的序号对其进行排序。 

ENUM和SET的区别:

ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。

  4.修改表结构

主键

PRIMARYKEY KEY

CONSTRAINT 主键名 PRIMARY KEY (列名a,列名b,...)

一个表中可以有多个主键。

 

插入数据

INSERT INTO 数据表名(列名1,列名2,列名3) VALUES(值1,值2,值3);

VALUES中的值为对应列属性的值,其中CHAR,VARCHAR,TEXT,DATE,TIME,ENUM等类型的数据需要单引号修饰。

  1.添加和删除列

-- 修改数据表
-- 添加列语法: ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
ALTER TABLE users ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10 AFTER name;
-- 删除列语法: ALTER TABLE tbl_name DROP [COLUMN] col_name
ALTER TABLE users DROP age;
-- 混合操作
ALTER TABLE users ADD gender VARCHAR(10) NOT NULL DEFAULT "male", ADD address VARCHAR(32) NOT NULL,DROP salary;

外键

CONSTRAINT 外键名 FOREIGN KEY (列名) REFERENCES 数据表名 (被参考的主键名)

每个表可以由多个外键,每个外键必须参考另一个表中的主键,被外键约束的列的取值必须在它参考的主键的列中有对应的值。

 

SQL约束

  2.修改列定义和列名

-- 修改列名,要重新声明列的数据类型和约束条件
ALTER TABLE users CHANGE name username varchar(10) NOT NULL;
-- 修改列定义
ALTER TABLE users MODIFY id SMALLINT NOT NULL FIRST;
-- 修改表名
ALTER TABLE users RENAME TO tb;

 

非空约束

NOT NULL

MySQL中违反非空约束只会警告不会报错。

SELECT teaID,teaName,dept,profession,salary

主键

PRIMARYKEY KEY

CONSTRAINT 主键名 PRIMARY KEY (列名a,列名b,...)

一个表中可以有多个主键。

四、MySQL查询操作

默认值约束

DEFAULT '默认值'

字符类型默认值使用单引号括起。

FROM T_teacher 

外键

CONSTRAINT 外键名 FOREIGN KEY (列名) REFERENCES 数据表名 (被参考的主键名)

每个表可以由多个外键,每个外键必须参考另一个表中的主键,被外键约束的列的取值必须在它参考的主键的列中有对应的值。

  1、查询数据

唯一约束

UNIQUE(列名)

该表中该列值不可重复。

ORDER BY 5 ASC

非空约束

NOT NULL

MySQL中违反非空约束只会警告不会报错。

  1.查询关键字 SELECT FROM

-- 查询单列
SELECT prod_name FROM products;
-- 查询多列
SELECT prod_id, prod_name, prod_price FROM products;
-- 查询所有列
SELECT * FROM products;

MySQL通配符

_   ### 只能匹配单个任意字符
%   ### 匹配0或多个任意字符

必须通过LIKE使用通配符。

通配符不能用于检索NULL。

使用通配符搜索相对于其他搜索方式通常要花费更长的时间。

将通配符放在搜索模式的开头处,搜索起来是最慢的,尽量避免这样做。

 

默认值约束

DEFAULT '默认值'

字符类型默认值使用单引号括起。

  2.排序关键字 ORDER BY

  查询的数据如果不排序,一般是以它在底层表中出现的顺序显示。如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

-- 单排
SELECT prod_name FROM products ORDER BY prod_name;
-- 多排
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
-- 按列位置排
SELECT prod_id, prod_price, prod_name FROM products ORDER BY 2, 3; 注,它只能根据已选择字段的相对位置排序
-- 指定排序方向
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

MySQL查询语句关键字顺序

mysql> SELECT ...
       FROM ...
       WHERE ...
       ORDER BY ...
       LIMIT ...;

对SELECT语句中的非选择列进行排序 

唯一约束

UNIQUE(列名)

该表中该列值不可重复。

  3.过滤关键字 where + 操作符

  where子句操作符表:

 操作符  说明
 =  等于
 <>  不等于
 !=  不等于
 <  小于
 <=  小于等于
 !<  不小于
 >  大于
 >=  大于等于
 !>  不大于
BETWEEN 在指定的两个值之间
IS NULL 为null值
AND、OR、NOT、IN 组合查询
LIKE 通配符过滤

  用例:

-- 匹配查询
SELECT prod_price, prod_name FROM products where prod_price = 3.49;
-- 不匹配查询
SELECT prod_price, prod_name FROM products where prod_price <> 10;
-- 范围查询
SELECT prod_price, prod_name FROM products where prod_price BETWEEN 5 AND 10; 
-- 空值查询
SELECT prod_name FROM products where prod_price IS NULL;
-- 组合查询AND
SELECT prod_id, prod_name, prod_price FROM products WHERE vend_id='DLL01' AND prod_price <= 4;
-- 组合查询OR
SELECT prod_name, prod_price FROM products WHERE vend_id='DLL01' OR vend_id = 'BRS01';
-- 组合查询AND和OR
SELECT prod_name, prod_price FROM products WHERE vend_id='DLL01' OR vend_id = 'BRS01' AND prod_price <= 4;
-- 组合查询IN
SELECT prod_name, prod_price FROM products WHERE vend_id IN ('DLL01', 'BRS01') ORDER BY prod_name;
-- 组合查询NOT
SELECT prod_name, prod_price FROM products WHERE vend_id NOT vend_id='DLL01';
-- 通配符过滤
SELECT prod_name FROM products WHERE prod_name LIKE '%TNT%';

SELECT操作

ORDER BY子句中也可以对没有在SELECT语句中出现的选择列进行排序操作。 

MySQL通配符

_   ### 只能匹配单个任意字符
%   ### 匹配0或多个任意字符

必须通过LIKE使用通配符。
通配符不能用于检索NULL。
使用通配符搜索相对于其他搜索方式通常要花费更长的时间。
将通配符放在搜索模式的开头处,搜索起来是最慢的,尽量避免这样做。

   2、数据处理函数

查看表中所有的内容

mysql> SELECT * FROM 数据表名;

 

MySQL查询语句关键字顺序

mysql> SELECT ...
       FROM ...
       WHERE ...
       ORDER BY ...
       LIMIT ...;

  1.文本处理函数

 函数 说明
 LEFT 返回字符串左边的字符
 LENGTH 返回字符串的长度
 LOWER  返回字符串的小写
 LTRIM 去掉字符串左边的空格
 RIGHT 返回字符串右边的字符
 RTRIM 去掉字符串右边的空格
UPPER 返回字符串的大写

   - 用例: 

SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;

SELECT基本格式

mysql> SELECT 列名a,列名b,...
       -> FROM 数据表名
       -> WHERE 限制条件1 AND/OR 限制条件2 ...
       -> 其他命令;

WHERE子句操作符

操作符 说明
= 等于
!= 不等于
<> 不等于
< 小于
> 大于
<= 小于等于
<= 大于等于
BETWEEN … AND 在两个值之间
AND 需要同时满足的条件
OR 满足其一即可的条件
IN 指定条件范围
NOT 否定其后的任何条件
IS NULL 空值检查
LIKE 使用通配符

AND的优先级大于OR,当同时使用AND和OR时,使用括号来避免因筛选顺序不同造成错误。

IN操作符的范围参数放在圆括号中,以逗号分隔。

使用IN通常比使用OR执行速度更快,而且语义更清楚,能够更动态的建立WHERE子句。

在进行匹配过滤和不匹配过滤时都不会对NULL值进行匹配。

NULL表示不含值,它不同于0、空字符串和空格。

使用单引号限定字符串。

匹配字符串时默认不区分大小写。

例如:

SELECT 列名a,列名b,... FROM 表名 WHERE 列名a>x1 AND/OR 列名a<x2 AND/OR 列名b='x3';
SELECT 列名a,列名b,... FROM 表名 WHERE 列名a IN/NOT IN ('范围列名a','范围列名b',...);
SELECT 列名a,列名b,... FROM 表名 WHERE 列名a LIKE 'xx_xx%';

 

SELECT操作

  2.日期和时间处理函数

  注:日期和时间函数根据

 函数  说明
 NOW()、SYSDATE()、CURRENT_TIMESTAMP、LOCALTIME、LOCALTIMESTAMP 获取当前日期和时间
 CURDATE(), CURRENT_DATE 获取当前日期
 CURTIME(), CURRENT_TIME 获取当前时间
 DATE、YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND 获取指定日期和时间的日期、年、季度、月、周、日、小时、分钟、秒、毫秒数
 WEEKOFYEAR、DAYOFYEAR、DAYOFMONTH、DAYOFWEEK、LAST_DAY 获取指定日期和时间的年周索引、年天索引、月天索引、周天索引,最后一天的日期
MONTHNAME、 DAYNAME 获取指定日期和时间的英文月名、英文天名
DATE_ADD、DATE_SUB 指定日期按指定参数进行加减运算
PERIOD_ADD、PERIOD_DIFF 指定日期加、减多少个月
TIMEDIFF 指定日期和时间相差多少个时间
TIMESTAMPDIFF 指定日期/时间或日期时间的差值
TO_DAYS、FROM_DAYS 日期和月数的相互转换函数
TIME_TO_SEC、SEC_TO_TIME 时间和秒数的相互转换函数
STR_TO_DATE、DATE_FORMAT 字符串/日期时间格式转换成新的格式
TIME_FORMAT 时间格式转换你成新的格式
MAKEDATE、MAKETIME 拼凑日期/时间
UNIX_TIMESTAMP、FROM_UNIXTIME 日期时间和unix时间戳的相互转化

   用例:

-- 获取当前日期和时间,日期指的是年月日,时间指的是时分秒
SELECT NOW(), SYSDATE(), CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP;
-- 分别获取当前日期和时间
SELECT CURDATE(), CURRENT_DATE, CURTIME(), CURRENT_TIME;
-- 分别获取日期时间、年、季度、月、周、日、时、分、秒
SELECT DATE(SYSDATE()), YEAR(SYSDATE()), QUARTER(SYSDATE()), MONTH(SYSDATE()), WEEK(SYSDATE()), DAY(SYSDATE()), HOUR(SYSDATE()), MINUTE(SYSDATE()), SECOND(SYSDATE()), MICROSECOND(SYSDATE());
-- 获取指定索引
SELECT WEEKOFYEAR(SYSDATE()), DAYOFYEAR(SYSDATE()), DAYOFMONTH(SYSDATE()), DAYOFWEEK(SYSDATE()), LAST_DAY(SYSDATE());
-- 获取月和周的英文名称
SELECT MONTHNAME(SYSDATE()), DAYNAME(SYSDATE());

-- DATE加,第一个参数是指定的日期和时间,第二个参数是间隔和单位
SELECT DATE_ADD(now(), INTERVAL 1 YEAR), DATE_ADD(now(), INTERVAL 2 MONTH), DATE_ADD(now(), INTERVAL 1000 SECOND);
-- DATE减,与DATE加参数相同
SELECT DATE_SUB(now(), INTERVAL 1 YEAR), DATE_SUB(now(), INTERVAL 2 MONTH), DATE_SUB(now(), INTERVAL 1000 SECOND);
-- 日期的加减运算
SELECT PERIOD_ADD(201808, 2), PERIOD_ADD(1808, 2),PERIOD_ADD(DATE_FORMAT(SYSDATE(), '%Y%m'), 2), PERIOD_DIFF(201808, 201004), PERIOD_DIFF(1808, 1004); 
-- 时间差计算
SELECT TIMEDIFF('2018-08-06', '2018-08-5');-- 不支持日期
SELECT TIMEDIFF('19:00:00', '17:00:00'), TIMEDIFF('2018-08-6 9:30:30', '2018-08-5 17:00:00');
-- 更便捷的日期/时间差值计算,第一个参数是要计算的字段,其值为第三个日期时间减去第二个日期时间
SELECT TIMESTAMPDIFF(DAY, '2018-08-5 17:00:00', '2018-08-8 9:30:30'), TIMESTAMPDIFF(DAY, '2018-08-5', '2018-08-8');
SELECT TIMESTAMPDIFF(SECOND, '17:00:00', '19:30:30');-- 不支持单独时间计算
-- 日期和天数的相互转换
SELECT TO_DAYS(SYSDATE()), TO_DAYS('2018-8-8'), FROM_DAYS(737279);
-- 时间和秒数的相互转换
SELECT TIME_TO_SEC(SYSDATE()), TIME_TO_SEC('12:00:00'), SEC_TO_TIME(43200);
-- 字符串格式化;字符串格式化成日期只能要按照字符串的写法改写成标准日期时间字符串
SELECT STR_TO_DATE('2018.08.6 9:30:30', '%Y.%m.%d %H:%i:%s');
-- 日期时间字符串可以随便更改或获取字段
SELECT DATE_FORMAT('2018-08-06 09:30:30', '%Y%m');-- 获取年月的组合字符串
SELECT DATE_FORMAT('2018-08-06 09:30:30', '%H%i%s');-- 获取时分秒的组合字符串
SELECT DATE_FORMAT(SYSDATE(), '%Y年%m月%d日 %H时哈哈%i分嘿嘿%d秒呵呵');-- 重新格式化
-- 时间格式化只能格式化时间
SELECT TIME_FORMAT('2018-08-06 09:30:30', '%Y年%m月%d日 %H时%i分%d秒');
-- 只对'09:30:30'进行格式化,日期全部为00
SELECT TIME_FORMAT('09:30:30', '%H时%i分%d秒');
-- MAKEDATE根据数字组合成日期(以天数换算),MAKETIME根据数字组合成时间
SELECT MAKEDATE(2018, 9);-- 结果是'2018-01-09'而不是'2018-09-01'
SELECT MAKEDATE(2018, 220);-- 结果是'2018-08-08'
SELECT MAKETIME(19,30,30);-- 与日期相反,支持三个参数拼接而不支持两个参数换算
-- 日期时间和unix时间的相互转换
SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(UNIX_TIMESTAMP());

对查询结果排序

mysql> SELECT 列名... FROM 表名 ORDER BY 首选排序列名 DESC/ASC, 第二排序列名 DESC/ASC, ... DESC/ASC;

ORDER BY 默认升序排列,使用ASC指定升序排序,使用DESC指定降序排序。

DESC/ASC只能直接作用于直接位于其前面的列名,如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

SELECT teaID,teaName,dept,profession

查看表中所有的内容

mysql> SELECT * FROM 数据表名;

  3.数值处理函数

函数  说明
ABS() 返回数字表达式的绝对值。
ACOS() 返回数字表达式的反余弦值。如果值是不在范围-1到1,则返回NULL。
ASIN() 返回数字表达式的反正弦。返回NULL,如果值不在范围-1到1
ATAN() 返回数字表达式的反正切。
ATAN2() 返回传递给它的两个变量的反正切。
BIT_AND() 返回按位AND运算表达中的所有位。
BIT_COUNT() 返回传递给它的二进制值的字符串表示。
BIT_OR() 返回传递表达的所有位的位或。
CEIL() 返回最小的整数值但不能比传递的数字表达式小
CEILING() 返回最小的整数值但不能比传递的数字表达式小
CONV() 表达式从一个基数到另一个基数转换的数字。
COS() 返回传递数字表达式的余弦值。数字表达式应该用弧度表示。
COT() 返回传递数字表达式的余切。
DEGREES() 返回数字表达式从弧度转换为度。
EXP() 返回数值表达式的自然对数(E)为基数的幂。
FLOOR() 返回最大整数值但不能大于通过表达式数值。
FORMAT() 返回数字表达式舍入到小数位数。
GREATEST() 返回输入表达式的最大值。
INTERVAL() 需要多个表达式exp1, exp2和exp3等..如果为exp1小于exp2返回0,如果为exp1小于exp3返回1等。
LEAST() 给两个或两个以上时,返回所有输入的最小值。
LOG() 返回通过数字表达式的自然对数。
LOG10() 返回传递表达的基数为10对数的数值。
MOD() 返回表达式由另一个表达式除以剩余部分。
OCT() 返回通过数字表达式的八进制值的字符串表示。如果传递值为NULL,返回NULL。
PI() 返回圆周率的值
POW() 返回一个表达式到另一个表达的次方值
POWER() 返回一个表达式到另一个表达的次方值
RADIANS() 返回传递表达从度转换为弧度值
ROUND() 返回数字表达式四舍五入到整数。可用于舍入表达式为小数点数值
SIN() 返回给定的数字表达的正弦值(弧度)
SQRT() 返回数字表达式的非负平方根
STD() 返回数字表达式的标准偏差
STDDEV() 返回数字表达式的标准偏差
TAN() 返回以弧度表示数值表达式的正切值。
TRUNCATE() 返回exp1小数位数字截断到exp2。如果exp2为0,则结果将没有小数点。

去除重复值

mysql> SELECT DISTINCT 列名... FROM 表名;

DISTINCT关键字作用于所有列而不是仅作用于前置它的列。

FROM T_teacher 

SELECT基本格式

mysql> SELECT 列名a,列名b,...
       -> FROM 数据表名
       -> WHERE 限制条件1 AND/OR 限制条件2 ...
       -> 其他命令;

WHERE子句操作符

操作符 说明
= 等于
!= 不等于
<> 不等于
< 小于
> 大于
<= 小于等于
<= 大于等于
BETWEEN … AND 在两个值之间
AND 需要同时满足的条件
OR 满足其一即可的条件
IN 指定条件范围
NOT 否定其后的任何条件
IS NULL 空值检查
LIKE 使用通配符

AND的优先级大于OR,当同时使用AND和OR时,使用括号来避免因筛选顺序不同造成错误。
IN操作符的范围参数放在圆括号中,以逗号分隔。
使用IN通常比使用OR执行速度更快,而且语义更清楚,能够更动态的建立WHERE子句。
在进行匹配过滤和不匹配过滤时都不会对NULL值进行匹配。
NULL表示不含值,它不同于0、空字符串和空格。
使用单引号限定字符串。
匹配字符串时默认不区分大小写。

例如:

SELECT 列名a,列名b,... FROM 表名 WHERE 列名a>x1 AND/OR 列名a<x2 AND/OR 列名b='x3';
SELECT 列名a,列名b,... FROM 表名 WHERE 列名a IN/NOT IN ('范围列名a','范围列名b',...);
SELECT 列名a,列名b,... FROM 表名 WHERE 列名a LIKE 'xx_xx%';

  4.聚合函数

函数  说明
 AVG  返回某列的平均值
 COUNT  返回某类的行数
 MAX  返回某列的最大值
 MIN  返回某列的最小值
 SUM  返回某列值之和

  用例:

-- AVG
SELECT AVG(prod_price) AS avg_price FROM products;
SELECT AVG(prod_price) AS avg_price FROM products WHERE vend_id=1003;
SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id=1003;-- 计算唯一值列表平均值
-- COUNT
SELECT COUNT(*) AS num_cust FROM customers;-- 对所有行技数
SELECT COUNT(cust_email) as num_cust FROM customers;-- 只对具有电子邮寄地址的客户计数(除去null)
-- SUM
SELECT SUM(item_price * quantity) AS total_price FROM orderitems WHERE order_num = 20005;
-- 组合
SELECT COUNT(*) AS nun_items, MIN(prod_price) AS price_min, MAX(prod_price) AS pric_max, AVG(prod_price) AS price_ag FROM products;

限制返回结果数

mysql> SELECT 列名... FROM 表名 LIMIT 检索起始行,最大输出行数;

mysql> SELECT 列名... FROM 表名 LIMIT 最大输出行数 OFFSET 检索起始行; # MySQL 5

若不指定起始行,则从第0行开始检索,注意MySQL中表行从0开始。

若语句中含有ORDER BY,则LIMIT应该位于ORDER BY之后。

例句:

SELECT 列名,... FROM 表名 ORDER BY 列名 ASC/DESC;

WHERE dept =’计算机系’

对查询结果排序

mysql> SELECT 列名... FROM 表名 ORDER BY 首选排序列名 DESC/ASC, 第二排序列名 DESC/ASC, ... DESC/ASC;

ORDER BY 默认升序排列,使用ASC指定升序排序,使用DESC指定降序排序。
DESC/ASC只能直接作用于直接位于其前面的列名,如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。

  3、分组关键字 GROUP BY 和HAVING

内置函数和计算

函数 功能 作用类型
COUNT() 计数 任意类型
SUM() 求和 数字类数据
AVG() 平均值 数字类数据
MAX() 最大值 数字类数据
MIN() 最小值 数字类数据
AS 重命名 不适用

例如:

SELECT COUNT/SUM/AVG/MAX/MIN(列名) AS 新的列名,函数2,函数3,... FROM 表名;
会将函数的结果作为新的列的值。

ORDER BY salary

去除重复值

mysql> SELECT DISTINCT 列名... FROM 表名;

DISTINCT关键字作用于所有列而不是仅作用于前置它的列。

  1.GROUP BY

  - GROUP BY子句可以包含任意数目的列。

  - GROUP BY会在最后规定的分组上进行汇总。

  - GROUP
BY子句列出的每个列都必须是检索列或有效的表达式(但不能是聚合函数)。

  - 除聚合函数外,SELECT语句中的每个列都必须在GROUP BY子句中给出。

  -
如果分组列中具有NULL值,则NULL将作为一个分组返回;如果列中有多行NULL值,它们将分为一组。

  - GROUP BY子句必须出现在WHERE子句字后,ORDER BY子句之前。

  一般在使用GROUP BY子句时,应该也给出ORDER
BY子句,以保证数据正确排序。

子查询

mysql> SELECT 所查列名,函数()
    -> FROM 表名 
    -> WHERE 所查列名 IN 
    -> (SELECT 相关列名 FROM 相关表名 WHERE 限制条件);

处理多个表且处理结果来自一个表时使用子查询,子查询可以扩展多层。

 

限制返回结果数

mysql> SELECT 列名... FROM 表名 LIMIT 检索起始行,最大输出行数;

mysql> SELECT 列名... FROM 表名 LIMIT 最大输出行数 OFFSET 检索起始行; # MySQL 5

若不指定起始行,则从第0行开始检索,注意MySQL中表行从0开始。
若语句中含有ORDER BY,则LIMIT应该位于ORDER BY之后。

例句:

SELECT 列名,... FROM 表名 ORDER BY 列名 ASC/DESC;

  2.HAVING

  HAVING支持所有WHERE操作符。它与WHERE最重要的区别是,HAVING对GROUP
BY分组后的数据进行过滤,而where在GROUP BY分组前组织新表时进行过滤。

  用例:

-- GROUP BY 与 HAVINNG
SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;
-- GROUP BY 与 ORDER BY
SELECT order_num, COUNT(*) AS items FROM orderitems GROUP BY order_num HAVING COUNT(*) >= 3 ORDER BY items, order_num;

连接查询

mysql> SELECT 列名1,列名2,...
    -> FROM 表名1,表名2
    -> WHERE 表名1.列名1 = 表名2.列名2;

mysql> SELECT 列名1,列名2,...
    -> FROM 表名1 JOIN 表名2
    -> ON 表名1.列名1 = 表名2.列名2;

使用连接查询显示多个表中的数据。

指定表中的多列进行排序 

内置函数和计算

函数 功能 作用类型
COUNT() 计数 任意类型
SUM() 求和 数字类数据
AVG() 平均值 数字类数据
MAX() 最大值 数字类数据
MIN() 最小值 数字类数据
AS 重命名 不适用

例如:

SELECT COUNT/SUM/AVG/MAX/MIN(列名) AS 新的列名,函数2,函数3,... FROM 表名;
会将函数的结果作为新的列的值。

  4、关键字顺序

关键字(子句) 说明
 是否必须使用
 SELECT  要返回的列或表达式  是
 FROM  从中检索数据的表  仅在从表选择数据时使用
 WHERE  行级过滤  否
 GROUP BY  分组说明  仅在按组计算聚集时使用
 HAVING  组级过滤  否
 ORDER BY  指定排序字段和熟顺序  否

   在实现SQL语句时,通用格式为:

SELECT *columns* FROM *tables* WHERE *condition* GROUP BY *columns* HAVING *condition* ORDER BY *columns* LIMIT *start*, *offset*;

  实际执行的顺序为:

FROM *tables*
WHERE *condition*
GROUP BY *columns*
HAVING *condition*
SELECT *columns*
ORDER BY *columns*
LIMIT *start*, *offset*

# 注:数据表来自

图片 1图片 2

CREATE TABLE customers
(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL ,
cust_address char(50) NULL ,
cust_city char(50) NULL ,
cust_state char(5) NULL ,
cust_zip char(10) NULL ,
cust_country char(50) NULL ,
cust_contact char(50) NULL ,
cust_email char(255) NULL ,
PRIMARY KEY (cust_id)
) ENGINE=InnoDB;

CREATE TABLE orderitems
(
order_num int NOT NULL ,
order_item int NOT NULL ,
prod_id char(10) NOT NULL ,
quantity int NOT NULL ,
item_price decimal(8,2) NOT NULL ,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;

CREATE TABLE orders
(
order_num int NOT NULL AUTO_INCREMENT,
order_date datetime NOT NULL ,
cust_id int NOT NULL ,
PRIMARY KEY (order_num)
) ENGINE=InnoDB;

CREATE TABLE products
(
prod_id char(10) NOT NULL,
vend_id int NOT NULL ,
prod_name char(255) NOT NULL ,
prod_price decimal(8,2) NOT NULL ,
prod_desc text NULL ,
PRIMARY KEY(prod_id)
) ENGINE=InnoDB;

CREATE TABLE vendors
(
vend_id int NOT NULL AUTO_INCREMENT,
vend_name char(50) NOT NULL ,
vend_address char(50) NULL ,
vend_city char(50) NULL ,
vend_state char(5) NULL ,
vend_zip char(10) NULL ,
vend_country char(50) NULL ,
PRIMARY KEY (vend_id)
) ENGINE=InnoDB;

CREATE TABLE productnotes
(
note_id int NOT NULL AUTO_INCREMENT,
prod_id char(10) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL ,
PRIMARY KEY(note_id),
FULLTEXT(note_text)
) ENGINE=MyISAM;

ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num);
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_products FOREIGN KEY (prod_id) REFERENCES products (prod_id);
ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id) REFERENCES customers (cust_id);
ALTER TABLE products ADD CONSTRAINT fk_products_vendors FOREIGN KEY (vend_id) REFERENCES vendors (vend_id);


INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES(10001, 'Coyote Inc.', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', 'Y Lee', 'ylee@coyote.com');
INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES(10002, 'Mouse House', '333 Fromage Lane', 'Columbus', 'OH', '43333', 'USA', 'Jerry Mouse');
INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES(10003, 'Wascals', '1 Sunny Place', 'Muncie', 'IN', '42222', 'USA', 'Jim Jones', 'rabbit@wascally.com');
INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES(10004, 'Yosemite Place', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'USA', 'Y Sam', 'sam@yosemite.com');
INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES(10005, 'E Fudd', '4545 53rd Street', 'Chicago', 'IL', '54545', 'USA', 'E Fudd');

INSERT INTO vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES(1001,'Anvils R Us','123 Main Street','Southfield','MI','48075', 'USA');
INSERT INTO vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES(1002,'LT Supplies','500 Park Street','Anytown','OH','44333', 'USA');
INSERT INTO vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES(1003,'ACME','555 High Street','Los Angeles','CA','90046', 'USA');
INSERT INTO vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES(1004,'Furball Inc.','1000 5th Avenue','New York','NY','11111', 'USA');
INSERT INTO vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES(1005,'Jet Set','42 Galaxy Road','London', NULL,'N16 6PS', 'England');
INSERT INTO vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES(1006,'Jouets Et Ours','1 Rue Amusement','Paris', NULL,'45678', 'France');


INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('ANV01', 1001, '.5 ton anvil', 5.99, '.5 ton anvil, black, complete with handy hook');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('ANV02', 1001, '1 ton anvil', 9.99, '1 ton anvil, black, complete with handy hook and carrying case');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('ANV03', 1001, '2 ton anvil', 14.99, '2 ton anvil, black, complete with handy hook and carrying case');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('OL1', 1002, 'Oil can', 8.99, 'Oil can, red');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('FU1', 1002, 'Fuses', 3.42, '1 dozen, extra long');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('SLING', 1003, 'Sling', 4.49, 'Sling, one size fits all');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('TNT1', 1003, 'TNT (1 stick)', 2.50, 'TNT, red, single stick');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('TNT2', 1003, 'TNT (5 sticks)', 10, 'TNT, red, pack of 10 sticks');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('FB', 1003, 'Bird seed', 10, 'Large bag (suitable for road runners)');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('FC', 1003, 'Carrots', 2.50, 'Carrots (rabbit hunting season only)');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('SAFE', 1003, 'Safe', 50, 'Safe with combination lock');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('DTNTR', 1003, 'Detonator', 13, 'Detonator (plunger powered), fuses not included');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('JP1000', 1005, 'JetPack 1000', 35, 'JetPack 1000, intended for single use');
INSERT INTO products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('JP2000', 1005, 'JetPack 2000', 55, 'JetPack 2000, multi-use');

INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20005, '2005-09-01', 10001);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20006, '2005-09-12', 10003);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20007, '2005-09-30', 10004);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20008, '2005-10-03', 10005);
INSERT INTO orders(order_num, order_date, cust_id)
VALUES(20009, '2005-10-08', 10001);

INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 1, 'ANV01', 10, 5.99);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 2, 'ANV02', 3, 9.99);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 3, 'TNT2', 5, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 4, 'FB', 1, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 1, 'JP2000', 1, 55);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 1, 'TNT2', 100, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 1, 'FC', 50, 2.50);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 1, 'FB', 1, 10);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 2, 'OL1', 1, 8.99);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 3, 'SLING', 1, 4.49);
INSERT INTO orderitems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 4, 'ANV03', 1, 14.99);

INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(101, 'TNT2', '2005-08-17',
'Customer complaint:
Sticks not individually wrapped, too easy to mistakenly detonate all at once.
Recommend individual wrapping.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(102, 'OL1', '2005-08-18',
'Can shipped full, refills not available.
Need to order new can if refill needed.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(103, 'SAFE', '2005-08-18',
'Safe is combination locked, combination not provided with safe.
This is rarely a problem as safes are typically blown up or dropped by customers.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(104, 'FC', '2005-08-19',
'Quantity varies, sold by the sack load.
All guaranteed to be bright and orange, and suitable for use as rabbit bait.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(105, 'TNT2', '2005-08-20',
'Included fuses are short and have been known to detonate too quickly for some customers.
Longer fuses are available (item FU1) and should be recommended.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(106, 'TNT2', '2005-08-22',
'Matches not included, recommend purchase of matches or detonator (item DTNTR).'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(107, 'SAFE', '2005-08-23',
'Please note that no returns will be accepted if safe opened using explosives.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(108, 'ANV01', '2005-08-25',
'Multiple customer returns, anvils failing to drop fast enough or falling backwards on purchaser. Recommend that customer considers using heavier anvils.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(109, 'ANV03', '2005-09-01',
'Item is extremely heavy. Designed for dropping, not recommended for use with slings, ropes, pulleys, or tightropes.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(110, 'FC', '2005-09-01',
'Customer complaint: rabbit has been able to detect trap, food apparently less effective now.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(111, 'SLING', '2005-09-02',
'Shipped unassembled, requires common tools (including oversized hammer).'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(112, 'SAFE', '2005-09-02',
'Customer complaint:
Circular hole in safe floor can apparently be easily cut with handsaw.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(113, 'ANV01', '2005-09-05',
'Customer complaint:
Not heavy enough to generate flying stars around head of victim. If being purchased for dropping, recommend ANV02 or ANV03 instead.'
);
INSERT INTO productnotes(note_id, prod_id, note_date, note_text)
VALUES(114, 'SAFE', '2005-09-07',
'Call from individual trapped in safe plummeting to the ground, suggests an escape hatch be added.
Comment forwarded to vendor.'
);

数据表

 

删除数据库

mysql-> DROP DATABASE 数据库名;

ORDER
BY子句除了可以指定单列进行排序操作,也可以指定数据表中的多个列进行排序操作。如果要指定数据表中的多个列进行排序操作,则指定排序的列与列之间需要用逗号隔开。其语法规则如下: 

子查询

mysql> SELECT 所查列名,函数()
    -> FROM 表名 
    -> WHERE 所查列名 IN 
    -> (SELECT 相关列名 FROM 相关表名 WHERE 限制条件);

处理多个表且处理结果来自一个表时使用子查询,子查询可以扩展多层。

重命名数据表

mysql-> RENAME TABLE 原数据表名 TO 新数据表名;

mysql-> ALTER TABLE 原数据表名 RENAME 新数据表名;

mysql-> ALTER TABLE 原数据表名 RENAME TO 新数据表名;

ORDER BY 列名1[ASC|DESC],列名2 [ASC|DESC] 

连接查询

mysql> SELECT 列名1,列名2,...
    -> FROM 表名1,表名2
    -> WHERE 表名1.列名1 = 表名2.列名2;

mysql> SELECT 列名1,列名2,...
    -> FROM 表名1 JOIN 表名2
    -> ON 表名1.列名1 = 表名2.列名2;

使用连接查询显示多个表中的数据。

删除数据表

mysql-> DROP TABLE 数据表名;

其中列名1和列名2表示需要对指定的数据列进行排序操作。列名1和列名2之间用逗号进行分割。关键字ASC和DESC是可选的。如果ORDER
BY 子句后面不写ASC或者DESC,则默认执行的是升序操作。首先,根据ORDER
BY中指定的第一列进行排序;然后,再根据ORDER
BY子句中指定的第二列的升序或者降序方式进行排序。 

删除数据库

mysql-> DROP DATABASE 数据库名;

在表中增加列

mysql-> ALTER TABLE 数据表名
     -> ADD COLUMN 新增列名 数据类型(数据长度) 约束
     -> 插入的位置;

mysql-> ALTER TABLE 数据表名
     -> ADD 新增列名 数据类型(数据长度) 约束
     -> 插入的位置;

插入的位置:

新增列默认放在表的最右边,使用 FIRST 将新列插入到第一列,使用 AFTER 指定列名 将新列插入到指定列后面。

 

重命名数据表

mysql-> RENAME TABLE 原数据表名 TO 新数据表名;

mysql-> ALTER TABLE 原数据表名 RENAME 新数据表名;

mysql-> ALTER TABLE 原数据表名 RENAME TO 新数据表名;

删除列

mysql-> ALTER TABLE 表名
     -> DROP COLUMN 列名;

mysql-> ALTER TABLE 表名
     -> DROP 列名;

 

删除数据表

mysql-> DROP TABLE 数据表名;

修改列

mysql-> ALTER TABLE 表名
     -> CHANGE 原列名 新列名 数据类型(数据长度) 约束;

数据类型不可省略。修改数据类型可能导致数据丢失,慎用

SELECT teaID,teaName,dept,profession,salary

在表中增加列

mysql-> ALTER TABLE 数据表名
     -> ADD COLUMN 新增列名 数据类型(数据长度) 约束
     -> 插入的位置;

mysql-> ALTER TABLE 数据表名
     -> ADD 新增列名 数据类型(数据长度) 约束
     -> 插入的位置;

插入的位置:

新增列默认放在表的最右边,使用 FIRST 将新列插入到第一列,使用 AFTER 指定列名 将新列插入到指定列后面。

修改数据类型

mysql-> ALTER TABLE 表名
     -> MODIFY 列名 新数据类型;

FROM T_teacher 

删除列

mysql-> ALTER TABLE 表名
     -> DROP COLUMN 列名;

mysql-> ALTER TABLE 表名
     -> DROP 列名;

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注