澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

MySQL常用操作,数据的排序与分组语句

2019-05-18 作者:数据库网络   |   浏览(163)

一、基本概念

启动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子句顺序
      • 子查询
  • 什么是SQL?
  • DDL(Data Definition Language,数据定义语言)
    • 创办数据库
    • 创建表
    • 删除表
    • 更新表
  • DML(Data Manipulation Language,数据操纵语言)
    • 基本语句
      • 数量查询
      • 查询条件
      • 分组聚合
      • 数码排序
      • 多少插入
      • 数量删除
      • 数码更新
    • 进级语句
      • 视图
      • 子查询
      • 函数
      • 谓词
      • CASE表达式
      • 表的加减法
      • 以列为单位对表实行合并
  • DCL(Data Control Language,数据调节语言)
    • 创制职业(START TRANSACTION) - 提交管理
    • 撤消管理

 

  2.数据库范式:

  数据库范式即数据库应该遵照的规则。近些日子关全面据库最常用的二种范式分别是:第2范式(壹NF)、第3范式(二NF)、第2范式(三NF)、BCN范式(BCNF)。

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

  第2范式:数据库表中的具有列都必须信赖于主键,那代表三个表只描述1件事情。

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

  BCN范式:Boyce-Codd,不容许现身有主键的一有的被主键另一局地照旧此外一些决定。即二个表中只可以有贰个主键。

  比方(摘自别的博客)表达BCN:

  假若旅馆管理关系表为StorehouseManage(宾馆ID, 存款和储蓄物品ID, 管理员ID, 数量),且有多少个大班只在3个储藏室职业;一个货仓可以积存八种物料。那个数据库表中存在如下决定涉及:

    (仓库ID, 存款和储蓄货品ID) →(管理员ID, 数量)

    (管理员ID, 存款和储蓄货品ID) → (客栈ID, 数量)

  所以,(旅舍ID, 存款和储蓄货品ID)和(管理员ID, 存储货物ID)都以StorehouseManage的候选关键字,表中的唯一非关键字段为多少,它是吻合第贰范式的。不过,由于存在如下决定涉及:

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

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

  即存在重视字段决定珍视字段的情形,所以其不合乎BCNF范式。

翻开命令补助消息

mysql> HELP 命令名;

启动MySQL服务

$ sudo service mysql start

什么是SQL?

SQL是Structured Query Language的缩写,意思是结构化查询语言,是1种在数据库管理种类(Relational Database Management System, HummerH二DBMS)中询问数据,或通过EnclaveDBMS对数据库中的数据进行改造的言语

常见的RDBMS有:

  • Oracle Database:大篆公司的LANDDBMS
  • SQL Server :微软集团的凯雷德DBMS
  • DB2:IBM 公司的RDBMS
  • PostgreSQL:开源的RDBMS
  • MySQL :开源的RDBMS

注:分歧GL450DBMS的SQL语言略有分化

实施原理

用户在客户端通过SQL语言,将索要的数目和对数码进行的操作的央浼发送给库罗德DBMS,瑞虎DBMS 依据该语句的内容重临所请求的数额,只怕对存款和储蓄在数据库中的数据开始展览立异。

根据对汉兰达DBMS 赋予的下令类其余不及,SQL 语句能够分为以下3类:

  • DDL(Data Definition Language,数据定义语言)
    • CREATE: 成立数据库和表等对象
    • DROP: 删除数据库和表等对象
    • ALTE奥迪Q5: 修改数据库和表等对象的布局
  • DML(Data Manipulation Language,数据操纵语言)
    • SELECT:查询表中的数据
    • INSERT:向表中插入新数据
    • UPDATE:更新表中的数据
    • DELETE:删除表中的数目
  • DCL(Data Control Language,数据调控语言)
    • COMMIT: 确认对数据库中的数据开始展览的退换
    • ROLLBACK: 裁撤对数据库中的数据开始展览的更换
    • GRANT: 赋予用户操作权限
    • REVOKE: 撤废用户的操作权限

利用SQL语句施行查询操作时,大家兴许开采查询出的数量结果的排序是无序的。为了越来越好的观看比赛数据表中的询问结果,开采人士恐怕用户时时要对查询的多寡举办排序操作,这就要求运用OHummerH二DER BY子句。在数据库的骨子里行使中,不经常供给对查询的数码开始展览计算和分组操作,那就要求精通SQL语句的聚合函数和GROUP BY子句的应用。有个别时候开荒人士只怕用户还可望对分组后的结果做越来越计算,在SQL语句中提供了ROLLUP那样一个重视字用来对数据开始展览总结。最终还将介绍首要数据库中如何界定结果集的行数。

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

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

  数据库管理种类(DataBase Management System, DBMS)是用来定义、管理和维护数据的软件。它是数据库系统的主要组成都部队分。数据库管理连串经过SQL语言来治本数据库中的数据。

查阅授予用户的安全权限

mysql> SHOW GRANTS;

利用root用户登6

$ mysql -u 用户名 -p

-p代表使用密码登入

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

 

  4.SQL语言:

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

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

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

    - 数据调节语言(Data Control Language, DCL)

注释

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

查阅命令支持音信

mysql> HELP 命令名;

创办数据库

CREATE DATABASE shop;

一.利用O普拉多DE索罗德 BY子句对数码记录举办排序

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

注销正在输入的指令

c

翻开授予用户的安全权限

mysql> SHOW GRANTS;

创建表

CREATE TABLE Product(product_id     CHAR      NOT NULL, product_name   VARCHAR NOT NULL, product_type   VARCHAR  NOT NULL, sale_price     INTEGER      , purchase_price INTEGER      , regist_date    DATE         , PRIMARY KEY (product_id));

每①列的数据类型是必须要钦赐的,数据类型包含:

  • INTEGER 整数型
  • NUMEBMWX三IC ( 全体位数, 小数位数)
  • CHABMWX三 定长字符串
  • VA本田CR-VCHA奇骏 可变长字符串
  • DATE 日期型

 

  常见数据库

  商业数据库:草书的Oracle、IBM的DB二、微软的Access和SQL Server。开源数据库:PostgreSQL、MySQL。

翻看当前带有哪些数据库

mysql> SHOW DATABASES;

注释

-- 单行注释

/* 多行注释 */

删除表

DROP TABLE Product;

钦命表中的一列实行排序 

  版本分类

  遵照操作系统:Windows版,UNIX版,Linux版,MacOS版;依照开辟情形:Alpha、Beta、Gamma与Available(GA)。

  阿尔法暗中表示那是三个以体现新特征为目标的版本,存在比较多的不稳固因素,还会向代码中加多新新个性

  beta 现在的beta版、发表版或制品公布中,全数API、外部可视结议和SQL命令列均不再退换,不再向代码中增加影响代码稳固性的新个性。Gamma比Beta版越来越高档。

  GA假使没有后缀,则暗指那是1个大部分意况下可用版本可能是产品版本。. GA releases则是稳固版。

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

总是数据库

mysql> USE 数据库名

撤除正在输入的命令

c

更新表

-- 在表中增加一列(ADD COLUMN)ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR;-- 在表中删除一列(DROP COLUMN)ALTER TABLE Product DROP COLUMN product_name_pinyin;-- 变更表名RENAME TABLE Poduct to Product;

因而ORDE揽胜极光 BY 子句可以对查询结果中钦点的列进行升序只怕是降序操作,这取决于O凯雷德DER BY子句后的关键字,如若OKugaDER BY子句前边的关键字是ASC,则对查询的结果实行升序操作;倘使O帕杰罗DER BY子句前面包车型客车最重要字是DESC,则对查询的结果施行降序操作。其语法规则如下 

  Linux安装MySQL

  

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

mysql> SHOW TABLES;

mysql> DESCRIBE 表名;

翻看当前带有哪些数据库

mysql> SHOW DATABASES;

DML(Data Manipulation Language,数据垄断(monopoly)语言)

ORDER BY 列名1 [ASC|DESC] 

2、MySQL数据类型(摘自新手教程:

  MySQL协理几类别型,大约可以分为③类:数值、日期/时间和字符串(字符)类型。

显示表属性

mysql> SHOW COLUMNS FROM 表名;

该命令将会输出指定表的每种字段的字段名、数据类型、非空约束、是还是不是是主键和默许值等音讯。

连接数据库

mysql> USE 数据库名

基本语句

里头列名一表示须求对该列举行排序操作。关键字ASC和DESC是可选的。要是O陆风X八DER BY 子句前面不写ASC或许是DESC,则默许实践的是升序操作。 

  一.平头品种的积存和范围

类型 大小 范围(有符号) 范围(无符号) 用途
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 表名;

数量查询

-- 查询出所有的列SELECT * FROM Product;-- 从表中查询出需要的列SELECT product_id, product_name, purchase_price  FROM Product;-- 为列设定别名SELECT product_id AS id,       product_name AS name,       purchase_price AS “价格”  FROM Product;-- 将查询出的一列指定为常数SELECT '2009-02-24' AS date, product_id, product_name  FROM Product;-- 从查询结果中删除重复行SELECT DISTINCT product_type  FROM Product;

 

  二.日期和时间项目

类型 大小 范围 格式 用途
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 表名;

该命令将会输出钦赐表的各种字段的字段名、数据类型、非空约束、是或不是是主键和私下认可值等新闻。

询问条件

SELECT product_name, product_type  FROM Product; WHERE product_type = '衣服';

 

  三.字符串类型

类型 大小 用途
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语句不区分轻重缓急写,但指出将珍视字大写,变量和数码小写。

展现服务器警告或错误音讯

mysql> SHOW ERRORS;

mysql> SHOW WARNINGS;

算数运算符

  • 减 -
  • 乘 *
  • 除 /
SELECT product_name, sale_price, sale_price * 2 AS "sale_price_x2"  FROM Product;

SELECT teaID,teaName,dept,profession,salary

三、MySQL表操作

新建数据表

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

专注最终一个列名前面不加逗号”,”。

退出数据库

mysql> EXIT/QUIT;

正如运算符

  • 等于 =
  • 不等于 <>
  • 大于 >
  • 不仅等于 >=
  • 小于 <
  • 低于等于 <=
SELECT product_name, product_type, regist_date  FROM Product WHERE regist_date < '2009-09-27'; -- 将算数运算符和比较运算符结合使用SELECT product_name, sale_price, purchase_price  FROM Product WHERE sale_price - purchase_price >= 500; -- 不能对NULL使用比较运算符,正确的方法是SELECT product_name, purchase_price  FROM Product WHERE purchase_price IS NULL;SELECT product_name, purchase_price  FROM Product WHERE purchase_price IS NOT NULL;

FROM T_teacher 

  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。

  - 能够统1八个表实践插入数据操作。

  - 不管从几个表中检索数据,数据都只可以插入到单个表中。

数据类型

数据类型 大小(字节) 用途 格式
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 长文本数据 -

新建数据库

mysql> CREATE DATABASE 数据库名;

习认为常SQL语句不区分轻重缓急写,但提议将入眼字大写,变量和数量小写。

逻辑运算符

  • NOT

    (也就是sale_price<1000)

SELECT product_name, product_type, sale_priceFROM ProductWHERE NOT sale_price >= 1000; 
  • AND

    AND运算符在其两侧的询问条件都建即刻整个查询条件才树立,其意思也就是“并且”。

SELECT product_name, purchase_price  FROM Product WHERE product_type = '厨房用具'   AND sale_price >= 3000;
  • OR

    运算符在其两侧的查询条件有一个创立刻整个查询条件都创造,其意思约等于“大概”。

SELECT product_name, purchase_price  FROM Product WHERE product_type = '厨房用具'    OR sale_price >= 3000;

WHERE dept ='计算机系'

  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的区别:

CHAMurano的尺寸是一直的,而VA中华VCHA酷路泽的长短是足以生成的。

比方,存储字符串"abc",对于CHA奥迪Q7(10),表示存款和储蓄的字符将占11个字节(包含八个空字符),

而同样的VA奥德赛CHAOdyssey(1二)则只占用三个字节的长度,1七只是最大值,

当你存款和储蓄的字符小于1二时,按实际尺寸存款和储蓄。

新建数据表

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

专注最终一个列名前面不加逗号”,”。

分组聚合

  • 常用的八个聚合函数:
    • COUNT: 计算表中的记录数
    • SUM: 总括表中数值列中数量的合计值
    • AVG: 计算表中数值列中数量的平均值
    • MAX: 求出表中大4列中数据的最大值
    • MIN: 求出表中跋扈列中数据的最小值
SELECT product_type, COUNT  FROM Product GROUP BY product_type; -- 计算某一列的行数SELECT COUNT(purchase_price)  FROM Product;  -- 计算删除重复数据后的行数SELECT COUNT(DISTINCT product_type)  FROM Product;  -- SUM/AVG函数只能对数值类型的列使用,而MAX/MIN函数原则上可以适用于任何数据类型的列SELECT MAX(regist_date), MIN(regist_date)  FROM Product;
  • GROUP BY和WHERE并用时SELECT语句的进行各类:

    FROM → WHERE → GROUP BY → SELECT

  SELECT purchase_price, COUNT    FROM Product   WHERE product_type = '衣服'GROUP BY purchase_price;
  • 为集聚结果钦命条件
  SELECT product_type, COUNT    FROM ProductGROUP BY product_type  HAVING COUNT = 2;

ORDER BY salary ASC

   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 长文本数据 -

数量排序

  • 子句的书写顺序

    SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY

  • 子句的实行各样:

    FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

  SELECT product_id, product_name, sale_price, purchase_price    FROM ProductORDER BY sale_price;
  • 升序或降序 注意:私下认可升序
  SELECT product_id, product_name, sale_price, purchase_price    FROM ProductORDER BY sale_price DESC;

 

  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中的值为对应列属性的值,在那之中CHAMurano,VA兰德WranglerCHA奥德赛,TEXT,DATE,TIME,ENUM等门类的多寡需求单引号修饰。

CHAR和VARCHAR的区别:

CHARubicon的尺寸是固定的,而VA奔驰M级CHA卡宴的尺寸是足以生成的。

举例,存款和储蓄字符串"abc",对于CHALX570(十),表示存储的字符将占十个字节(包蕴7个空字符),

而同样的VA奥德赛CHAWrangler(1二)则只占用三个字节的长度,10只是最大值,

当您存款和储蓄的字符小于12时,按其实尺寸存款和储蓄。

数量插入

-- 包含列清单INSERT INTO Product (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');-- 省略列清单START TRANSACTION; INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL,'2009-11-11');COMMIT;-- 从其他表中复制数据INSERT INTO ProductCopy (product_id, product_name, product_type,sale_price, purchase_price, regist_date)SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date  FROM Product;

点名表中列的岗位序号进行排序 

  二.约束原则

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

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

 

SQL约束

ENUM和SET的区别:

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

多少删除

-- 清空表DELETE FROM Product;-- 指定删除对象(搜索型DELETE)DELETE FROM Product WHERE sale_price >= 4000;

排在使用OOdysseyDER BY子句进行排序操作时,除了能够行使列名对点名列进行序,也得以动用该列在选用列表中的地点的序号对其展开排序。 

  四.修改表结构

主键

PRIMARYKEY KEY

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

2个表中能够有多少个主键。

安排数据

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

VALUES中的值为对应列属性的值,个中CHAPAJERO,VA昂CoraCHA中华V,TEXT,DATE,TIME,ENUM等类其余数码需求单引号修饰。

数量更新

-- 更新整列UPDATE Product   SET regist_date = '2009-10-10';   -- 指定条件的更新(搜索型UPDATE)UPDATE Product   SET sale_price = sale_price * 10 WHERE product_type = '厨房用具'; -- 多列更新UPDATE Product   SET sale_price = sale_price * 10,       purchase_price = purchase_price / 2 WHERE product_type = '厨房用具';

 

  一.加多和删除列

-- 修改数据表
-- 添加列语法: 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约束

进级语句

 

  二.更改列定义和列名

-- 修改列名,要重新声明列的数据类型和约束条件
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中违反非空约束只会警告不会报错。

主键

PRIMARYKEY KEY

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

3个表中能够有三个主键。

视图

注意:定义视图时不可能运用O昂科威DE福睿斯 BY子句

-- 创建视图(CREATE VIEW)CREATE VIEW ProductSum (product_type, cnt_product)AS  SELECT product_type, COUNT    FROM ProductGROUP BY product_type; -- 使用视图SELECT product_type, cnt_product  FROM ProductSum; -- 删除视图(DROP VIEW)DROP VIEW ProductSum;

SELECT teaID,teaName,dept,profession,salary

4、MySQL查询操作

默许值约束

DEFAULT '默认值'

字符类型暗许值使用单引号括起。

外键

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

各样表能够由多少个外键,每一种外键必须参照另三个表中的主键,被外键约束的列的取值必须在它参考的主键的列中有对应的值。

子查询

-- 在FROM子句中直接书写定义视图的SELECT语句SELECT product_type, cnt_product  FROM   (  SELECT product_type, COUNT AS cnt_product       FROM Product   GROUP BY product_type   ) AS ProductSum;  -- 在WHERE子句中使用标量子查询SELECT product_id, product_name, sale_price  FROM Product WHERE sale_price > (SELECT AVG(sale_price)                       FROM Product);-- 关联子查询SELECT product_type, product_name, sale_price  FROM Product AS P1  WHERE sale_price > (SELECT AVG(sale_price)                       FROM Product AS P2                       WHERE P1.product_type = P2.product_type                   GROUP BY product_type);

注意:

  • 可见使用常数恐怕列名的地点,无论是SELECT 子句、GROUP BY 子句、HAVING 子句,依然O汉兰达DE智跑 BY 子句,大概全部的地点都足以利用标量子查询。
  • 此地起到关键作用的便是在子查询中加上的WHERE 子句的口径。该条件的情趣正是,在同一商品种类中对各商品的出售单价和平均单价举行相比较。

FROM T_teacher 

  一、查询数据

唯一约束

UNIQUE(列名)

该表中该列值不可重复。

非空约束

NOT NULL

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

函数

函数大约可以分成以下三种。

  1. 算术函数(用来进展数值总括的函数)
  2. 字符串函数(用来拓展字符串操作的函数)
  3. 日子函数(用来开始展览日期操作的函数)
  4. 改动函数(用来改造数据类型和值的函数)
  5. 聚合函数(用来开始展览数量聚合的函数)
  • 算数函数

    ABS —— 绝对值

    MOD —— 求余

    ROUND (对象数值, 保留小数的位数) —— 肆舍五入

  • 字符串函数

    CONCAT (字符串1, 字符串2, 字符串3) —— 拼接

    LENGTH —— 字符串长度

    LOWER —— 小写

    UPPER —— 大写

    REPLACE (对象字符串,替换前的字符串,替换后的字符串) —— 替换

    SUBST普拉多ING(对象字符串 FROM 截取的胚胎地点 FO大切诺基 截取的字符数)—— 截取

  • 日期函数

    CURRENT_DATE —— 当明天子

    CURRENT_TIME —— 当前光阴

    CURRENT_TIMESTAMP —— 当前的日子和岁月

    EXTRACT (日期成分 FROM 日期)

  • 转移函数

    CAST(调换前的值 AS 想要转换的数据类型)—— 类型调换

    COALESCE (数据1,数据2,数据三……) —— 将NULL调换为此外值

ORDER BY 5 ASC

  一.询问关键字 SELECT FROM

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

MySQL通配符

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

无法不经过LIKE使用通配符。

通配符无法用来检索NULL。

动用通配符找寻相对于其余寻觅格局一般要开支越来越长的时光。

将通配符放在搜索形式的开始处,寻找起来是最慢的,尽量防止那样做。

暗中认可值约束

DEFAULT '默认值'

字符类型私下认可值使用单引号括起。

谓词

  • LIKE

  • BETWEEN

  • IS NULL和IS NOT NULL

  • EXIST和NOT EXIST

  • IN和 NOT IN

    留意:在应用IN 和NOT IN 时是不恐怕选抽出NULL 数据的。

 

  2.排序关键字 OHighlanderDEHummerH二 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 ...;

唯一约束

UNIQUE(列名)

该表中该列值不可重复。

CASE表达式

SELECT product_name,       CASE WHEN product_type = '衣服'            THEN CONCAT('A:', product_type)            WHEN product_type = '办公用品'            THEN CONCAT('B:', product_type)            WHEN product_type = '厨房用具'            THEN CONCAT('C:',product_type)            ELSE NULL       END AS abc_product_type  FROM Product;

对SELECT语句中的非采用列实行排序 

  三.过滤关键字 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操作

MySQL通配符

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

不能够不透过LIKE使用通配符。
通配符不可能用于检索NULL。
动用通配符找寻相对于任何搜索方式一般要成本越来越长的时刻。
将通配符放在搜索格局的伊始处,找寻起来是最慢的,尽量幸免那样做。

表的加减法

  • 表的加法
SELECT product_id, product_name   FROM ProductUNIONSELECT product_id, product_name  FROM Product2;

经过UNION 实行并集运算时能够利用别的情势的SELECT 语句,WHERE、GROUP BY、HAVING 等子句都足以采取,可是OQashqaiDE酷路泽 BY 只辛亏结尾动用二次。

只顾:UNION会删去七个表中的重复记录。若是想保留重复记录,能够在UNION后边加ALL

  • 挑选表中的公共部分(INTE奥德赛SECT)

MySQL不支持INTERSECT

  • 表的减法

MySQL不支持EXCEPT

O奥迪Q5DE宝马7系 BY子句中也足以对尚未在SELECT语句中出现的挑三拣4列实行排序操作。 

   二、数据管理函数

查看表中具备的原委

mysql> SELECT * FROM 数据表名;

MySQL查询语句关键字顺序

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

以列为单位对表进行联合

  • 内联结(INNER JOIN)
    SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price      FROM ShopProduct AS SPINNER JOIN Product AS P        ON SP.product_id = P.product_id;

像这么使用联结运算将满足一样规则的表联结起来时,WHERE、GROUP BY、HAVING、OPRADODE帕杰罗 BY 等工具都得以健康使用.

  • 外联结(OUTER JOIN)
         SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price           FROM ShopProduct AS SP LEFT OUTER JOIN Product AS P             ON SP.product_id = P.product_id;
  • 3张以上的表的联合
    SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name,            P.sale_price,IP.inventory_quantity      FROM ShopProduct AS SP INNER JOIN Product AS P        ON SP.product_id = P.product_idINNER JOIN InventoryProduct AS IP        ON SP.product_id = IP.product_id     WHERE IP.inventory_id = 'P001';

 

  一.文本管理函数

 函数 说明
 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的事先级大于ORAV四,当同时采用AND和O智跑时,使用括号来防止因筛选顺序分化形成错误。

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

选用IN常常比使用O福特Explorer实施进度越来越快,而且语义更掌握,能够改造态的创立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操作

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

 

  二.日期和岁月管理函数

  注:日期和岁月函数依照

 函数  说明
 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;

OPRADODEWrangler BY 私下认可升序排列,使用ASC钦命升序排序,使用DESC钦点降序排序。

DESC/ASC只好一贯效果于直接放在其近来的列名,假诺想在多少个列上实行降序排序,必须对各种列钦赐DESC关键字。

查看表中存有的内容

mysql> SELECT * FROM 数据表名;

创造职业(START TRANSACTION) - 提交管理

START TRANSACTION;    -- 将运动T恤的销售单价降低1000日元    UPDATE Product       SET sale_price = sale_price - 1000     WHERE product_name = '运动T恤';    -- 将T恤衫的销售单价上浮1000日元    UPDATE Product       SET sale_price = sale_price   1000     WHERE product_name = 'T恤衫';COMMIT;

SELECT teaID,teaName,dept,profession

  叁.数值管理函数

函数  说明
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关键字效能于具有列而不是仅功能于前置它的列。

SELECT基本格式

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

WHERE子句操作符

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

AND的前期级大于O帕杰罗,当同时利用AND和ORAV4时,使用括号来幸免因筛选顺序差异变成错误。
IN操作符的限制参数放在圆括号中,以逗号分隔。
应用IN平时比采取O宝马X5施行进程越来越快,而且语义更领会,能够改动态的确立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%';

撤消管理

START TRANSACTION;    -- 将运动T恤的销售单价降低1000日元    UPDATE Product       SET sale_price = sale_price - 1000     WHERE product_name = '运动T恤';    -- 将T恤衫的销售单价上浮1000日元    UPDATE Product       SET sale_price = sale_price   1000     WHERE product_name = 'T恤衫';ROLLBACK;

参考:

FROM T_teacher 

  肆.聚合函数

函数  说明
 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起始。

若语句中带有O昂科拉DEQX56 BY,则LIMIT应该投身OXC90DE路虎极光 BY其后。

例句:

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

对查询结果排序

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

O汉兰达DE凯雷德 BY 暗中认可升序排列,使用ASC内定升序排序,使用DESC钦定降序排序。
DESC/ASC只可以直接效果于直接放在其前面的列名,假如想在几个列上进行降序排序,必须对种种列钦定DESC关键字。

WHERE dept ='Computer系'

  三、分组关键字 GROUP BY 和HAVING

放置函数和测算

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

例如:

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

去除重复值

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

DISTINCT关键字功能于具有列而不是仅成效于前置它的列。

ORDER BY salary

  1.GROUP BY

  - GROUP BY子句能够包括自由数指标列。

  - GROUP BY会在最终分明的分组上进展集中。

  - GROUP BY子句列出的各种列都必须是寻找列或有效的表明式(但无法是聚合函数)。

  - 除聚合函数外,SELECT语句中的种种列都必须在GROUP BY子句中提交。

  - 假设分组列中全部NULL值,则NULL将用作贰个分组重回;借使列中有多行NULL值,它们将分成1组。

  - GROUP BY子句必须出今后WHERE子句字后,OLANDDE汉兰达 BY子句以前。

  一般在利用GROUP BY子句时,应该也给出OHighlanderDER BY子句,以保障数据准确排序。

子查询

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

管理多少个表且管理结果来自二个表时使用子查询,子查询能够扩张多层。

限定重临结果数

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

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

若不钦点起首行,则从第0行开始搜寻,注意MySQL中表行从0初阶。
若语句中涵盖OCRUISERDE奔驰G级 BY,则LIMIT应该投身O奥迪Q5DER 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 表名;
会将函数的结果作为新的列的值。

点名表中的多列进行排序 

  四、关键字顺序

关键字(子句) 说明
 是否必须使用
 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*;

  实际试行的11为:

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 数据库名;

子查询

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

拍卖八个表且管理结果来自1个表时使用子查询,子查询可以扩张多层。

O福睿斯DER BY子句除了能够钦赐单列实行排序操作,也得以钦定数量表中的多少个列举办排序操作。假若要钦定数量表中的三个列实行排序操作,则钦点排序的列与列之间需求用逗号隔开分离。其语法规则如下: 

重命名数据表

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

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

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

连年查询

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;

应用连接查询展现多个表中的数额。

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

删除数据表

mysql-> DROP TABLE 数据表名;

剔除数据库

mysql-> DROP DATABASE 数据库名;

里头列名壹和列名贰表示须求对点名的多少列进行排序操作。列名壹和列名二之间用逗号举行划分。关键字ASC和DESC是可选的。假使O哈弗DER BY 子句后边不写ASC恐怕DESC,则暗许推行的是升序操作。首先,依照OKugaDER BY中钦命的首先列进行排序;然后,再依靠OLacrosseDER BY子句中钦赐的第二列的升序只怕降序情势展开排序。 

在表中加进列

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 原列名 新列名 数据类型(数据长度) 约束;

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

在表中加进列

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

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

布置的任务:

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

SELECT teaID,teaName,dept,profession,salary

修改数据类型

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

删除列

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

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

FROM T_teacher 

修改表中有个别值

mysql-> UPDATE 表名
     -> SET 列名a=新值a,列名b=新值b,...
     -> WHERE 条件;

必然要加限制规范!

修改列

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

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

ORDER BY salary DESC,dept ASC

去除某行记录

mysql-> DELETE FROM 表名
     -> WHERE 条件;

必然要加限制条件!

修改数据类型

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

 

为某列构建目录

mysql-> ALTER TABLE 表名
     -> ADD INDEX 索引名 (列名);

mysql-> CREATE INDEX 索引名
     -> ON 表名 (列名);

修改表中有些值

mysql-> UPDATE 表名
     -> SET 列名a=新值a,列名b=新值b,...
     -> WHERE 条件;

自然要加限制标准!

2.常用的聚合函数

体现某表的目录

mysql-> SHOW INDEX FROM 表名;

删除某行记录

mysql-> DELETE FROM 表名
     -> WHERE 条件;

鲜明要加限制标准!

 

创办视图(1种虚拟存在的表)

mysql-> CREATE VIEW 视图名(列名1,列名2,...)
     -> AS SELECT 目标列名a,目标列名b,...
     -> FROM 表名;

在SELECT中使用子查询或再而三查询能够将视图创建在多张表上。

为某列塑造目录

mysql-> ALTER TABLE 表名
     -> ADD INDEX 索引名 (列名);

mysql-> CREATE INDEX 索引名
     -> ON 表名 (列名);

聚合函数也被称为分组函数大概计算函数,首要用于对获得的1组数据举行总括计算,例如求和、求平均值等,常用的聚合函数包蕴COUNT、MAX、MIN、SUM和AVG八个。 

导入(将文件中的数据保存进表)

mysql-> LOAD DATA INFILE '文件路径'
     -> INTO TABLE 表名;

体现某表的目录

mysql-> SHOW INDEX FROM 表名;

COUNT、SUM和AVG函数中能够使用DISTINCT关键字去除钦点列中的重复项。使用DISTINCT关键字后只是对差异行的值实行计算。 

导出(将表中数据保存到文件中)

mysql-> SELECT 列名1,列名2,...
     -> INTO OUTFILE '文件路径'
     -> FROM 表名;

创制视图(一种虚拟存在的表)

mysql-> CREATE VIEW 视图名(列名1,列名2,...)
     -> AS SELECT 目标列名a,目标列名b,...
     -> FROM 表名;

在SELECT中使用子查询或一连查询可以将视图创立在多张表上。

MAX和MIN函数中的列大概表明式可以是数字型、字符型也许是日期类型的值。假如MAX和MIN函数中的列或然表明式是字符型的,则依照首字母从A到Z的相继排序,要是首字母一样,则相比较字符串中第二个字母的高低,由此及彼。汉字则是安份守己其普通话拼音的全拼来排序。

备份整个数据库

$ mysqldump -u root 数据库名 > 备份文件名

导入(将文件中的数据保存进表)

mysql-> LOAD DATA INFILE '文件路径'
     -> INTO TABLE 表名;

 

备份整个表

$ mysqldump -u root 数据库名 数据表名 > 备份文件名

导出(将表中数据保存到文件中)

mysql-> SELECT 列名1,列名2,...
     -> INTO OUTFILE '文件路径'
     -> FROM 表名;

 

苏醒数据库

mysql-> source 文件路径/备份文件名;
# 注意:需要先使用USE命令选择数据库之后才能使用SOURCE命令

mysql-> CREATE DATABASE 新建数据库名;
mysql-> quit/exit;
$ mysql -u root 新建的数据库名 < 备份文件名;
或者
$ mysqldump -u root -p 新建的数据库名 < 备份文件名;

备份整个数据库

$ mysqldump -u root 数据库名 > 备份文件名

SELECT MAX(salary),MIN(salary)

复制整个数据表到一张新表中

create table <新表名> (
      select * from <数据表>
)

备份整个表

$ mysqldump -u root 数据库名 数据表名 > 备份文件名

FROM T_teacher

正则表明式

  • 用关键字REGEXP来合作正则表明式

  • 正则表明式都要接纳括起

  • REGEXP的再次回到值

    • 0 代表不相配
    • 一 表示分外
  • 使用.在正则表明式中非常放肆三个字符

  • ???LIKE和REGEXP所相称的片段(列值、列名)

  • v三.二三.四从此,MySQL中正则表明式暗许不区分轻重缓急写

  • 要分裂轻重缓急写,供给在REGEXP之后、表明式以前加BINAQX56Y关键字

  • 招来多少个字符串之1

    • 使用|将四个字符串分隔开分离
    • 倘使知足当中三个字符串就能够回到结果
  • 寻觅七个字符中的3个字符

    • 使用[]将三个字符括起
    • 只要相配字符聚焦的叁个字符即可回到结果
    • ‘[1a2b]’等同于’[1|a|2|b]’
    • 使用[0-9]相称0到九之间的狂妄数字,可自定义范围
    • 使用[a-z]相配a到z之间的放肆字母,可自定义范围
    • 在集中的开首处(在[]内部)放置^标记表示否认,将会相称除字符集中的字符以外的字符
  • ‘[1|2|3] sth.’ 将会相称一 sht.或二 sth.或三 sth.

  • ‘一|二|3 sth.’ 将会相配一或二或三 sth.

  • MySQL中的正则表达式使用双反斜杠()来表示转义

  • 许多DBMS中动用反斜杠()表示转义,但MySQL供给运用双反斜杠()表示转义

平复数据库

mysql-> source 文件路径/备份文件名;
# 注意:需要先使用USE命令选择数据库之后才能使用SOURCE命令

mysql-> CREATE DATABASE 新建数据库名;
mysql-> quit/exit;
$ mysql -u root 新建的数据库名 < 备份文件名;

 

空域元字符

元字符 说明
f 换页
n 换行
r 回车
t 水平制表
v 垂直制表

正则表明式

  • 用关键字REGEXP来合作正则表明式
  • 正则表达式都要利用括起
  • REGEXP的再次来到值

    • 0 表示不合营
    • 一 表示万分
  • 使用.在正则表达式中13分放肆2个字符

  • ???LIKE和REGEXP所相配的片段(列值、列名)

  • v三.贰叁.肆自此,MySQL中正则表明式默许不区分轻重缓急写

  • 要分别轻重缓急写,必要在REGEXP之后、表明式以前加BINAXC90Y关键字

  • 寻觅多个字符串之一

    • 使用|将八个字符串分隔绝
    • 固然满意当中四个字符串即可回到结果
  • 招来八个字符中的七个字符

    • 使用[]将四个字符括起
    • 只要相称字符聚集的1个字符即可回到结果
    • ‘[1a2b]’等同于’[1|a|2|b]’
    • 使用[0-9]相称0到9里边的随机数字,可自定义范围
    • 使用[a-z]相配a到z之间的任意字母,可自定义范围
    • 在集聚的起先处(在[]内部)放置^标记代表否定,将会相称除字符聚集的字符以外的字符
  • ‘[1|2|3] sth.’ 将会匹配一 sht.或二 sth.或三 sth.

  • ‘一|二|叁 sth.’ 将会相配一或二或3 sth.

  • MySQL中的正则表明式使用双反斜杠()来代表转义

  • 诸多DBMS中采纳反斜杠()表示转义,但MySQL供给运用双反斜杠()表示转义

SUM和AVG函数中的表明式只好是数字类型的值。 

字符类(预订义字符集)

字符类 说明
[:alnum:] 任意字符和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和水平制表(同[t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包含空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[fnrtv])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数(同[a-fA-F0-9])

空域元字符

元字符 说明
f 换页
n 换行
r 回车
t 水平制表
v 垂直制表

除了COUNT(*)之外,其余的多少个函数在图谋时都忽略表明式中的空值(NULL行)。 

协作多少个实例

重复元字符 说明
* 0个或多个匹配
1个或多个匹配(同{1,})
? 0个或1个匹配(同{0,1)
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)

再次元字符对它前边的字符或表达式生效

字符类(预订义字符集)

字符类 说明
[:alnum:] 任意字符和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和水平制表(同[t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包含空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[fnrtv])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数(同[a-fA-F0-9])

COUNT函数是用来测算数据表中的总部数,SUM函数是用来总括数据表中某1列的属性值的总额。 

一定元字符

定位元字符 说明
^ 只匹配文本的开始处
$ 只匹配文本的结尾处
[[:<:]] 只匹配词的开始处
[[:>:]] 只匹配词的结尾处

一直元字符对它前边的字符或表明式生效

合作八个实例

重复元字符 说明
* 0个或多个匹配
1个或多个匹配(同{1,})
? 0个或1个匹配(同{0,1)
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)

重复元字符对它前面的字符或表明式生效

 

拼接字段

  • 在 SELECT 之后、FROM 在此之前使用 Concat()函数拼接字段(列)

  • 快要查询并拼接的多个列名和其余要插入的字符(比方括号等)作为 Concat()的参数

  • 各种参数之间利用逗号分隔

  • 大部DBMS使用 || 或许 来实现拼接,但MySQL使用 Concat()函数

  • 在开始展览SQL语句转变时必要注意这一界别

  • MySQL函数能够嵌套使用

  • 使用 Trim()函数来去除查询结果中两边的有着空格

  • 运用 LTrim()函数来去除查询结果中上手的保有空格

  • 选拔 RTrim()函数来去除查询结果中右侧的享有空格

  • 函数参数为要搜索的列名

牢固元字符

定位元字符 说明
^ 只匹配文本的开始处
$ 只匹配文本的结尾处
[[:<:]] 只匹配词的开始处
[[:>:]] 只匹配词的结尾处

原则性元字符对它前边的字符或表达式生效

 

别名(alias)

  使用 AS 关键字创建别名
  AS 可以放在 FROM 之前或者之后
  别名可以用于为列名重命名
  AS关键字只对它前面的一个列名起作用

拼接字段

  • 在 SELECT 之后、FROM 在此以前使用 Concat()函数拼接字段(列)
  • 快要查询并拼接的多少个列名和任何要插入的字符(比如括号等)作为 Concat()的参数
  • 各样参数之直接纳逗号分隔

  • 大部DBMS使用 || 只怕 来实现拼接,但MySQL使用 Concat()函数

  • 在打开SQL语句转变时索要专注那一界别

  • MySQL函数能够嵌套使用

  • 运用 Trim()函数来去除查询结果中两边的有着空格

  • 采纳 LTrim()函数来去除查询结果中上手的具有空格

  • 利用 RTrim()函数来去除查询结果中左边的享有空格
  • 函数参数为要找寻的列名

SELECT SUM(salary),COUNT(salary),AVG(salary)

MySQL算数操作符

操作符 说明
-
*
/

能够应用圆括号分别运算优先顺序

别名(alias)

  使用 AS 关键字创建别名
  AS 可以放在 FROM 之前或者之后
  别名可以用于为列名重命名
  AS关键字只对它前面的一个列名起作用

FROM T_teacher

SELECT测试

  • MySQL中SELECT语句能够简不难单FROM子句直接访问和管理表明式,以便试验

MySQL算数操作符

操作符 说明
-
*
/

能够应用圆括号分别运算优先顺序

MySQL常用操作,数据的排序与分组语句。 

SQL函数

  • 函数的移植性不及SQL语句,分化DBMS之间函数差别比较大
  • 在接纳函数时应有做好代码注释,以便以往的修改职业

SELECT测试

  • MySQL中SELECT语句能够简不难单FROM子句直接待上访问和拍卖表明式,以便试验

聚合函数只可以冒出在SELECT语句、GROUP BY子句以及HAVING子句中,WHERE子句中不可能出现聚合函数。

常用的文本处理函数

函数 说明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Rigit() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写

Soundex是将文本串转变为描述其语音表示的字母数字格局的算法,使得能够对串进行声张相比较而不是字母相比较

比方搜索发音类似 Lie 的子串:

mysql> SELECT 列名
       FROM 表名
       WHERE Soundex(列名)=Soundex('Lie');

该搜索可以相配到发音与 Lie 类似的 Lee 、 Li 等

SQL函数

  • 函数的移植性不比SQL语句,不相同DBMS之间函数差别非常大
  • 在采纳函数时应该加强代码注释,以便现在的修改工作

 

日期和时间处理函数

函数 说明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分 v4.1.1
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期计算函数?
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 返回一个日期对应的星期
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Now() 返回当前日期时间
Second() 返回一个时间的秒部分
Time() 返回一个日期的时间部分 v4.1.1
Year() 返回一个日期的年份部分

MySQL日期格式使用 yyyy-mm-dd 格式

寻觅日期时应当接纳Date()函数,直接比较恐怕检验不到结果

MySQL会将00-6九拍卖为两千-206玖,将70-9玖拍卖为一九七〇-一9玖七,为幸免歧义,使用正式格式

常用的文本管理函数

函数 说明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Rigit() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写

Soundex是将文本串转变为描述其语音表示的字母数字格局的算法,使得能够对串举办声张相比而不是字母比较
诸如寻觅发音类似 Lie 的子串:

mysql> SELECT 列名
       FROM 表名
       WHERE Soundex(列名)=Soundex('Lie');

该找寻可以合营到发音与 Lie 类似的 Lee 、 Li 等

三.使用GROUP BY子句对表中多少实行分组

数值管理函数

函数 说明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

日子和岁月管理函数

函数 说明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分 v4.1.1
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期计算函数?
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 返回一个日期对应的星期
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Now() 返回当前日期时间
Second() 返回一个时间的秒部分
Time() 返回一个日期的时间部分 v4.1.1
Year() 返回一个日期的年份部分

MySQL日期格式使用 yyyy-mm-dd 格式
寻觅日期时应该运用Date()函数,直接相比或者质量评定不到结果
MySQL会将00-69甩卖为3000-206九,将70-9九管理为一9陆6-1997,为防止歧义,使用规范格式

 

SQL聚焦函数

函数 说明
AVG() 返回某列的平均值
COUNT() 返回某行的平均值
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和
  • 在八个列上进行总计

    • 动用标准的算术操作符,全数的聚集函数都得以用来进行多少个列上的总结
    • 将列名和算术操作符组成的算数表达式作为函数参数,不要增添逗号、引号等
  • NULL处理

    • AVG() 函数忽略值为 NULL 的行
    • COUNT(*) 不忽略值为 NULL 的行
    • COUNT(列名) 忽略值为 NULL 的行
    • MAX() 函数忽略值为 NULL 的行
    • MIN() 函数忽略值为 NULL 的行
    • SUM() 函数忽略值为 NULL 的行
  • AVG()函数

    • AVG() 只可以用来鲜明特定数值列的平均值
    • 列名必须作为参数给出
    • 为了获得八个列的平均值,必须使用多个AVG()函数
  • COUNT()函数

    • 使用 COUNT(*) 对表中央银行的数据实行总计,不忽视 NULL 值
    • 选择 COUNT(列名) 对一定列的行开始展览计数,忽略 NULL 值
  • MAX()/MIN()函数

    • 能够拍卖非数值数据
  • 集中区别的值,忽略重复值

    • 在集结函数参数的第陆人增多 DISTINCT 只对两样的值进行测算
    • v5.0.3及以上
    • DISTINCT 后必须跟有列名,不能用于总计依旧表明式
    • COUNT(*) 不可能接纳 DISTINCT
    • 将 DISTINCT 用于 MAX()/MIN() 函数未有实际意义
  • 结合聚集函数

    • SELECT 语句能够依靠必要包罗八个汇集函数
    • 每一种集中函数之间用逗号分隔

数值管理函数

函数 说明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

单列分组 

分组数据

GROUP BY 子句提醒MySQL分组数据,然后对每一个组而不是成套结果集进行联谊。

使用GROUP BY的部分规定:

  GROUP BY 子句可以包好任意数目的列,这使得能够对分组进行嵌套
  如果在 GROUP BY 中嵌套了分组,数据将在最后规定的分组上进行汇总,即在建立分组时,指定的所有列都一起计算,不能从个别的列取回数据。
  GROUP BY 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中使用相同的表达式。不能使用别名。
  除聚集计算语句外,SELECT 语句中的每个列都必须在 GROUP BY 子句中给出。
  如果分组列具有 NULL 值,则 NULL 作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。
  GROUP BY子句必须出现在 WHERE 子句之后、ORDER BY 子句之前。

使用 ROLLUP
选用 WITH ROLLUP 关键字,能够博得每一个分组以及各类分组集中等第(针对各类分组)的值。

SQL聚焦函数

函数 说明
AVG() 返回某列的平均值
COUNT() 返回某行的平均值
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列之和
  • 在七个列上实行测算

    • 选拔专门的学问的算术操作符,全部的集中函数都可以用来施行三个列上的测算
    • 将列名和算术操作符组成的算数表明式作为函数参数,不要加多逗号、引号等
  • NULL处理

    • AVG() 函数忽略值为 NULL 的行
    • COUNT(*) 不忽略值为 NULL 的行
    • COUNT(列名) 忽略值为 NULL 的行
    • MAX() 函数忽略值为 NULL 的行
    • MIN() 函数忽略值为 NULL 的行
    • SUM() 函数忽略值为 NULL 的行
  • AVG()函数

    • AVG() 只好用来分明特定数值列的平均值
    • 列名必须作为参数给出
    • 为了博取五个列的平均值,必须选拔三个AVG()函数
  • MySQL常用操作,数据的排序与分组语句。COUNT()函数

    • 使用 COUNT(*) 对表中央银行的数目进行计算,不忽视 NULL 值
    • 行使 COUNT(列名) 对一定列的行进行计数,忽略 NULL 值
  • MAX()/MIN()函数

    • 能够拍卖非数值数据
  • 会见不一样的值,忽略重复值

    • 在集合函数参数的第五人增加 DISTINCT 只对两样的值举办总括
    • v5.0.3及以上
    • DISTINCT 后必须跟有列名,不得以用来总结依旧表达式
    • COUNT(*) 不可能运用 DISTINCT
    • 将 DISTINCT 用于 MAX()/MIN() 函数未有实际意义
  • 组合集中函数

    • SELECT 语句能够依据供给包罗八个集聚函数
    • 各类集中函数之间用逗号分隔

选拔GROUP BY子句对数据表中的某1列举行分组时,会对点名分组的列中差异的值都图谋出贰个总计结果。其语法格式如下: 

WHERE 和 HAVING

  • WHERE 过滤行,HAVING 过滤分组。WHERE 中从未分组的概念
  • HAVING 协理全体 WHERE 操作符
  • WHERE 在多少分组前开始展览过滤,HAVING 在数据分组后举行过滤

分组数据

GROUP BY 子句提示MySQL分组数据,然后对每种组而不是全方位结果集举办联谊。

运用GROUP BY的片段规定:

  GROUP BY 子句可以包好任意数目的列,这使得能够对分组进行嵌套
  如果在 GROUP BY 中嵌套了分组,数据将在最后规定的分组上进行汇总,即在建立分组时,指定的所有列都一起计算,不能从个别的列取回数据。
  GROUP BY 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中使用相同的表达式。不能使用别名。
  除聚集计算语句外,SELECT 语句中的每个列都必须在 GROUP BY 子句中给出。
  如果分组列具有 NULL 值,则 NULL 作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。
  GROUP BY子句必须出现在 WHERE 子句之后、ORDER BY 子句之前。

使用 ROLLUP 使用 WITH ROLLUP 关键字,可以拿走每一种分组以及种种分组聚焦等级(针对各种分组)的值。

GROUP BY列名1 

GROUP BY 和 ORDER BY

ORDER BY GROUP BY
排序产生的输出 分组行,但输出可能不是分组的数据
任意列都可以使用(甚至非选择的列) 只能使用选择的列或表达式,而且必须使用每个选择列表达式
不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用

诚如在运用 GROUP BY 子句时,应该也提交 OSportageDE凯雷德 BY 子句,那是保障数据正确排序的举世无双格局。

WHERE 和 HAVING

  • WHERE 过滤行,HAVING 过滤分组。WHERE 中未有分组的概念
  • HAVING 支持具备 WHERE 操作符
  • WHERE 在数据分组前开始展览过滤,HAVING 在数量分组后展开过滤

中间列名一表示须求对该列实行分组操作。 

SELECT子句顺序

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 尽在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数

GROUP BY 和 ORDER BY

ORDER BY GROUP BY
排序产生的输出 分组行,但输出可能不是分组的数据
任意列都可以使用(甚至非选择的列) 只能使用选择的列或表达式,而且必须使用每个选择列表达式
不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用

貌似在行使 GROUP BY 子句时,应该也交给 O安德拉DELX570 BY 子句,这是保险数据精确排序的唯一办法。

 

子查询

MySQL 四.一引进了对子查询的支撑。

查询

其它SQL语句都是查询,但此术语一般指 SELECT 语句。

子查询

即嵌套在别的查询中的查询。

  • 在 SELECT 语句中,子查询总是从内向外管理
  • 嵌套的子查询的数据未有限制
  • 骨子里利用时由于天性的界定,不能够嵌套太多的子查询

在 WHERE 子句中使用子查询,应该保险 SELECT 语句具备与 WHERE 一样数量的列。平常,子查询将重返单个列并且与单个列相称,但假设急需,也能够动用八个列。

子查询一般与 IN 操作符结合使用,但也足以用于测试格外(=)、不等于(<>)等。

相关子查询

论及外部查询的子查询。

当列名也有多义性的时候要动用完全限定列名来幸免歧义。

SELECT子句顺序

子句 说明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 尽在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数

 

子查询

MySQL 四.壹引进了对子查询的补助。
查询 任何SQL语句都以询问,但此术语一般指 SELECT 语句。
子查询 即嵌套在任何查询中的查询。

  • 在 SELECT 语句中,子查询总是从内向外管理
  • 嵌套的子查询的数码未有限定
  • 实际选拔时由于脾气的限定,不能够嵌套太多的子查询

在 WHERE 子句中使用子查询,应该保障 SELECT 语句具备与 WHERE 一样数量的列。平时,子查询将回来单个列并且与单个列相称,但借使必要,也足以选取多少个列。
子查询一般与 IN 操作符结合使用,但也可以用来测试相当(=)、不对等(<>)等。

相关子查询 涉及外部查询的子查询。

当列名也是有多义性的时候要采用完全限定列名来制止歧义。

SELECT dept,COUNT(profession)

FROM T_teacher

GROUP BY dept

 

Select同时涵盖数据列和聚合函数时,必须使用Group By。 

多列分组 

选拔GROUP BY子句对数码表中的多少个列进行分组时,会对点名分组的多少个列中不相同的值都划算出二个总计结果。其语法格式如下: 

GROUP BY列名1,列名2… 

里头列名一和列名二表示要求对点名列实行分组操作。列名壹和列名二之间用逗号举办剪切。 

应用HAVING子句子限制分组后的查询结果 

若果想要对分组后的结果限制查询条件,就须求选取HAVING子句。由于HAVING子句是用来界定分组后的查询结果,所以该子句须要安放GROUP BY子句的背后使用。其语法格式如下: 

GROUP BY列名壹 HAVING 条件发挥式 

在那之中列名1表示供给对该列进行分组操作。HAVING子句后的标准表明式是用来筛选分组后的结果。在HAVING子句中平时应用聚合函数对分组后的结果举行筛选。 

 

 

SELECT dept,profession,MAX(salary)

FROM T_teacher

GROUP BY dept,profession

HAVING MAX(salary)>3000

 

专注:GROUP BY下才有HAVING,HAVING用于组;而WHERE是对准SELECT的(针对于表大概视图),WHERE用于遍及前。 

 

SELECT profession,MAX(salary)

FROM T_teacher

WHERE age>30

GROUP BY profession

HAVING MAX(salary)>3000

 

对分组结果举办排序 

数不完时候,对数码表中数据举行分组后,还愿意对分组的结果开始展览排序操作。假诺想对使用了GROUP BY子句的分组结果进行排序的话,就需求利用O路虎极光DE悍马H2 BY子句。 

 

 

SELECT dept,profession,MAX(salary)

FROM T_teacher

澳门新萄京官方网站,GROUP BY dept

ORDER BY MAX(salary) DESC

 

安分守纪GROUP BY后分得的各组中的最高级技术员资给组排序;而正如语句则是依据每组的首先行的工报酬组排序。 

 

 

SELECT dept,profession,MAX(salary)

FROM T_teacher

GROUP BY dept

ORDER BY salary DESC

 

GROUP BY子句中处理NULL值 

在运用GROUP BY子句对对钦赐列进行分组时,一时恐怕会遇上钦命列中富含NULL值的动静。此时,GROUP BY子句会将该列中装有的NULL值归为壹组。 

万壹要博取每种分组中的薪酬的最大值对应的行(而不是分组的率先行),能够使用子查询等艺术,详细现在切磋。 

 

 

select teaName,salary

from (select * from t_teacher order by salary desc) temp

group by dept

order by salary

 

肆.利用ROLLUP关键字计算数据

 

在事实上行使中,临时不仅仅要求取得分组后的总计结果,还盼望对分组的总计结果做越来越的总括,举例通过对助教消息表(T_teacher)中的学院和学校和教师职员和工人职务名称进行分组,获得分组后老师的薪给,还期待对每贰个院系中的教师的薪给做一个阶段性的计算,希望获得各个校园中分裂职衔的民间兴办教师的工薪的加和(相当于小计),还盼望赢得全部高校不一致职衔教师薪金的总和(也正是总括)。那一年只是使用GROUP BY子句是不能够成功的,此时就须要动用ROLLUP关键字。 

ROLLUP关键字选拔时索要停放GROUP BY关键字的背后。ROLLUP关键字在差别的数据库中的使用格局上稍有例外。 

a.在MySQL和Microsoft SQL Server数据库中必要接纳WITH ROLLUP。其语法格式如下:

 

 

GROUP BY 列名1 WITH ROLLUP

 

当中列名一表示要对该列实行分组,WITH ROLLUP关键字表示要对分组的结果举办总结。当然也足以对七个列进行分组,并计算分组后的结果。其语法格式如下: 

GROUP BY 列名1 ,列名2 WITH ROLLUP 

b.在Oracle数据库中,ROLLUP关键字须求紧跟在GROUP BY关键字的末端,然后再写要求分组的字段。其语法格式如下: 

GROUP BY ROLLUP (列名1,列名2…)

 

伍.限制结果集行数

 

有个别时候,开荒人士只怕用户并不期待将查询结果的数据列中的数据总体出示出来,而是只愿意突显在那之中的几行,特别是在需求分页的操作中。比如,2个数据表最终查询出了100条记下,而开荒职员大概用户只关切个中前十条记下的值,那就必要对查询结果中的数据记录的行数举行限制。在不一致的数据库中限制结果集行数的主意也不尽同样。 

a.在MySQL数据库中限制结果集行数能够运用LIMIT关键字,它能够用来界定查询出来的多寡结果的个数。通过动用LIMIT关键字能够让开拓职员可能用户获得个中想要的一些的结果。借使要使用LIMIT限制结果集行数,可以使用上面包车型客车语法格式。 

LIMIT n 

内部LIMIT是重大字,数字n表示要界定结果集行数。

 

 

SELECT teaID,teaName,dept,profession

FROM T_teacher

ORDER BY teaID

LIMIT 3

-- 升序排序后的前3条记下

LIMIT 3,3

-- 升序排序后的第4条到第伍条记下

 

b.Oracle数据库中不帮忙类似于 MySQL 中的 LIMIT关键字来限制结果集行数,可是在 Oracle数据库中得以接纳ROWNUM关键字限制结果集的行数。其语法格式如下: 

WHERE ROWNUM<n 

当中ROWNUM关键字表示对符合条件结果的行列号,它的开头值总是从一起来的。数字n表示要限量的结果集的行数。当然,这里的可比运算符除了能够使用(<)小于以外,还足以应用(<=)小于等于。 

c.MySQL数据库和Oracle数据库中央银行使LIMIT关键字和ROWNUM的法子限制结果集行数,在Microsoft SQL Server数据库中要求利用TOP关键字。其语法格式如下: 

SELECT TOP n [PRECENT] 列名1,列名2 … 

FROM 表名 

… 

中间,TOP是表示限制结果集行数的主要字;数字n表示限制结果集行数;PRECENT关键字表示回去查询的结果聚集前n%的行数,它是可选的。

使用SQL语句实施查询操作时,大家兴许发掘查询出的数码结果的排序是无序的。为了更加好的体察数据表中的询问结果...

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:MySQL常用操作,数据的排序与分组语句

关键词: