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

豆蔻年华、基本概念

多少的排序与分组语句

启动MySQL服务

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

  1.数据库:

  数据库(DataBase卡塔尔(قطر‎正是二个储存数据的酒馆,为了方便数据的囤积和管制,它将数据根据一定的法则存款和储蓄在磁盘上。通过数据库管理连串,能够使得的团组织和保管存款和储蓄在数据库中的数据。数据库是数据管理软件。数据存款和储蓄分为四个级次:人工管理阶段、文件系统阶段和数据库系统阶段。

 

动用root客商登录

$ mysql -u 用户名 -p

-p意味着使用密码登陆

  2.数据库范式:

  数据库范式即数据库应该遵从的规规矩矩。近些日子关周到据库最常用的各个范式分别是:第后生可畏范式(1NF卡塔尔国、第二范式(2NF卡塔尔(英语:State of Qatar)、第三范式(3NF卡塔尔(قطر‎、BCN范式(BCNF卡塔尔(قطر‎。

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

  第二范式:数据库表中的享有列都必须正视于主键,那表示多个表只描述少年老成件事情。

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

  BCN范式:Boyce-Codd,不容许现身存主键的风流洒脱有个别被主键另黄金时代有个别照旧其余一些决定。即二个表中只好有贰个主键。

  举个例子(摘自其他博客卡塔尔(英语:State of Qatar)表明BCN:

  即使旅馆管理涉及表为StorehouseManage(仓库ID, 存款和储蓄物品ID, 管理员ID,
数量卡塔尔,且有三个组织者只在一个库房工作;三个库房可以累积多样物料。这一个数据库表中存在如下决定涉及:

    (酒店ID, 存款和储蓄货物ID卡塔尔国 →(助理馆员ID, 数量卡塔尔(英语:State of Qatar)

    (助理馆员ID, 存款和储蓄货物ID卡塔尔(英语:State of Qatar) → (酒馆ID, 数量)

  所以,(仓库ID, 存款和储蓄货色ID卡塔尔(قطر‎和(管理员ID,
存款和储蓄物品ID卡塔尔(英语:State of Qatar)都以StorehouseManage的候选关键字,表中的唯生龙活虎非关键字段为数量,它是切合第三范式的。可是,由于存在如下决定涉及:

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

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

  即存在首要字段决定首要字段的情景,所以其不符合BCNF范式。

应用SQL语句施行查询操作时,大家也许开掘查询出的多少结果的排序是冬季的。为了更加好的观看比赛数据表中的查询结果,开拓职员大概顾客时时要对查询的数量开展排序操作,这就须要选用ORubiconDER
BY子句。在数据库的实际利用中,有的时候供给对查询的数码开展计算和分组操作,那就须求驾驭SQL语句的聚合函数和GROUP
BY子句的应用。某些时候开拓职员可能顾客还希望对分组后的结果做更加的的计算,在SQL语句中提供了ROLLUP那样三个主要字用来对数码实行总结。最后还将介绍首要数据库中怎么着界定结果集的行数。

翻看命令扶持音讯

mysql> HELP 命令名;

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

  数据库系统由数据库、数据库处理连串、应用开荒工具构成。

  数据库管理体系(DataBase Management System,
DBMS卡塔尔国是用来定义、管理和保安数据的软件。它是数据库系统的基本点组成都部队分。数据库管理体系通过SQL语言来管理数据库中的数据。

 

查阅付与顾客的河池权限

mysql> SHOW GRANTS;

  4.SQL语言:

  SQL(Structured Query Language卡塔尔(英语:State of Qatar)语言的全称是布局化查询语言。它满含:

    - 数据库定义语言(Data Definition Language, DDL卡塔尔(英语:State of Qatar)

    - 数据操作语言(Data Manipulation Language, DML卡塔尔

    - 数据调节语言(Data Control Language, DCL卡塔尔国

1.施用O奇骏DEMurano BY子句对数据记录进行排序

注释

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

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

 

撤除正在输入的命令

c

  布衣蔬食数据库

  商业数据库:金鼎文的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开放源码、跨平台性、价格优势、功效强盛且使用方便。

经过O奔驰M级DEXC90 BY
子句能够对查询结果中钦命的列实行升序只怕是降序操作,那取决OHavalDER
BY子句后的首要字,假设O大切诺基DER
BY子句前面包车型客车重要字是ASC,则对查询的结果实践升序操作;假诺O中华VDER
BY子句前边的要害字是DESC,则对查询的结果奉行降序操作。其语准绳则如下 

老是数据库

mysql> USE 数据库名

  Linux安装MySQL

  

ORDER BY 列名1 [ASC|DESC] 

查看当前数据库中带有何表

mysql> SHOW TABLES;

mysql> DESCRIBE 表名;

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

  MySQL帮助多样类型,差非常的少能够分成三类:数值、日期/时间和字符串(字符卡塔尔(قطر‎类型。

中间列名1表示要求对该列进行排序操作。关键字ASC和DESC是可选的。借使ORAV4DER
BY 子句前边不写ASC或许是DESC,则暗许试行的是升序操作。 

突显表属性

mysql> SHOW COLUMNS FROM 表名;

该命令将会输出钦赐表的每一个字段的字段名、数据类型、非空限制、是或不是是主键和暗中同意值等消息。

  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;

  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;

  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字节 二进制形式的极大文本数据

SELECT teaID,teaName,dept,profession,salary

新建数据库

mysql> CREATE DATABASE 数据库名;

平凡SQL语句不区分朗朗上口写,但建议将珍视字大写,变量和数据小写。

三、MySQL表操作

FROM T_teacher 

新建数据表

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

小心最终一个列名后边不加逗号”,”。

  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。

  - 能够统生机勃勃五个表试行插入数据操作。

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

WHERE dept =’Computer系’

数据类型

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

  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举办测验,以保险它过滤的是真的要删减的记录。

ORDER BY salary ASC

CHAR和VARCHAR的区别:

CHAKuga的长度是永世的,而VARCHALX570的长度是能够转移的。

譬如,存储字符串"abc",对于CHA牧马人(10卡塔尔(英语:State of Qatar),表示存款和储蓄的字符将占十二个字节(包括7个空字符卡塔尔(قطر‎,

而相似的VARCHA大切诺基(12卡塔尔(قطر‎则只占用3个字节的长短,12只是最大值,

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

   3.创制表及节制原则

 

ENUM和SET的区别:

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

  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中的值为对应列属性的值,个中CHATiggo,VARCHAEscort,TEXT,DATE,TIME,ENUM等门类的多寡需求单引号修饰。

  2.封锁原则

  限制是为了保障数据的完整性和后生可畏致性,约束类型满含:

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

 

排在使用O宝马7系DER
BY子句进行排序操作时,除了能够动用列名对点名列实行序,也足以接收该列在增选列表中的地点的序号对其举行排序。 

SQL约束

  4.修改表构造

 

主键

PRIMARYKEY KEY

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

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

  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 数据表名 (被参考的主键名)

各样表能够由多个外键,各样外键必需参照另一个表中的主键,被外键节制的列的取值必得在它参照他事他说加以考查的主键的列中有料理的值。

  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;

 

SELECT teaID,teaName,dept,profession,salary

非空约束

NOT NULL

MySQL中违反非空限定只会警示不会报错。

四、MySQL查询操作

FROM T_teacher 

暗中同意值节制

DEFAULT '默认值'

字符类型暗中认可值使用单引号括起。

  1、查询数据

ORDER BY 5 ASC

唯一约束

UNIQUE(列名)

该表中该列值不可重复。

  1.询问关键字 SELECT FROM

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

 

MySQL通配符

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

非得经过LIKE使用通配符。

通配符不能够用于检索NULL。

利用通配符找出相对于别的搜索形式平时要花费更加长的时日。

将通配符放在寻找情势的启幕处,寻觅起来是最慢的,尽量幸免那样做。

  2.排序关键字 O福特ExplorerDETiggo 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;

对SELECT语句中的非选取列实行排序 

MySQL查询语句关键字顺序

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

  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%';

OCRUISERDESportage BY子句中也得以对从未在SELECT语句中冒出的取舍列进行排序操作。 

SELECT操作

   2、数据管理函数

 

查看表中所有的剧情

mysql> SELECT * FROM 数据表名;

  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的优先级大于O昂科拉,当同一时间利用AND和O本田CR-V时,使用括号来制止因筛选顺序不一样产生错误。

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

行使IN日常比使用O牧马人实施进程更加快,而且语义更了然,可以更换态的确立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%';

  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());

韦德1946娱乐手机版,SELECT teaID,teaName,dept,profession

对查询结果排序

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

OHighlanderDERubicon BY 暗许升序排列,使用ASC内定升序排序,使用DESC内定降序排序。

DESC/ASC只能直接作用于直接放在其前面的列名,假设想在八个列上举办降序排序,必得对各种列钦赐DESC关键字。

  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,则结果将没有小数点。

FROM T_teacher 

除去重复值

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

DISTINCT关键字作用于具备列实际不是仅功用于前置它的列。

  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;

WHERE dept =’计算机系’

节制再次回到结果数

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

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

若不点名最初行,则从第0行开首物色,注意MySQL中表行从0起头。

若语句中富含O劲客DE纳瓦拉 BY,则LIMIT应该放在OHighlanderDEWrangler BY之后。

例句:

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

  3、分组关键字 GROUP BY 和HAVING

ORDER BY salary

内置函数和总计

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

例如:

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

  1.GROUP BY

  - GROUP BY子句能够饱含自由数目标列。

  - GROUP BY会在终极明确的分组上举行汇总。

  - GROUP
BY子句列出的各类列都必得是寻觅列或有效的表达式(但无法是聚合函数卡塔尔(قطر‎。

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

  -
假若分组列中装有NULL值,则NULL将作为三个分组再次回到;倘诺列中有多行NULL值,它们将分为风华正茂组。

  - GROUP BY子句必须出以往WHERE子句字后,OTiggoDETiguan BY子句从前。

  平时在使用GROUP BY子句时,应该也给出OLANDDER
BY子句,以有限协理数据准确排序。

 

子查询

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

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

  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;

利用连接查询展现多个表中的数码。

  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*

# 注:数据表来自

韦德1946娱乐手机版 1韦德1946娱乐手机版 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.'
);

数据表

 

OMuranoDER
BY子句除了能够内定单列举行排序操作,也足以钦赐数量表中的两个列实行排序操作。假如要内定数量表中的三个列进行排序操作,则钦定排序的列与列之间须要用逗号隔断。其语法则则如下: 

删除数据库

mysql-> DROP DATABASE 数据库名;

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

重命名数据表

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

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

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

中间列名1和列名2表示必要对点名的数码列进行排序操作。列名1和列名2之间用逗号实行划分。关键字ASC和DESC是可选的。假使O汉兰达DER
BY 子句后边不写ASC或许DESC,则暗中同意实行的是升序操作。首先,根据OPRADODER
BY中钦点的第一列实行排序;然后,再凭借O奇骏DER
BY子句中钦点的第二列的升序可能降序情势开展排序。 

除去数据表

mysql-> DROP TABLE 数据表名;

 

在表中追加列

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

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

布署的地点:

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

 

删除列

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

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

SELECT teaID,teaName,dept,profession,salary

修改列

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

数据类型不可省略。改正数据类型也许引致数据错过,慎用

FROM T_teacher 

修正数据类型

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

ORDER BY salary DESC,dept ASC

修改表中有个别值

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

必然要加节制标准!

 

除去某行记录

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

早晚要加节制标准!

2.常用的聚合函数

为某列创立目录

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

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

 

来得某表的目录

mysql-> SHOW INDEX FROM 表名;

聚合函数也被称呼分组函数也许总计函数,主要用以对拿到的风流浪漫组数据开展总计总括,譬喻求和、求平均值等,常用的聚合函数满含COUNT、MAX、MIN、SUM和AVG三个。 

创办视图(后生可畏种设想存在的表)

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

在SELECT中使用子查询或三番两次查询能够将视图创设在多张表上。

COUNT、SUM和AVG函数中得以选择DISTINCT关键字去除内定列中的重复项。使用DISTINCT关键字后只是对差异行的值进行总计。 

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

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

MAX和MIN函数中的列也许表明式能够是数字型、字符型或然是日期类型的值。若是MAX和MIN函数中的列恐怕表达式是字符型的,则根据首字母从A到Z的依次排序,借使首字母雷同,则相比较字符串中第三个字母的深浅,依此类推。汉字则是比照其汉语拼音的全拼来排序。

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

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

 

备份整个数据库

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

 

备份整个表

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

SELECT MAX(salary),MIN(salary)

光复数据库

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

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

FROM T_teacher

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

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

 

正则表达式

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

  • 正则表明式都要运用括起

  • REGEXP的重返值

    • 0 表示不相称
    • 1 表示特别
  • 使用.在正则表明式中相称大肆叁个字符

  • ???LIKE和REGEXP所相配的一些(列值、列名)

  • v3.23.4随后,MySQL中正则表明式暗中同意不区分抑扬顿挫写

  • 要不一致朗朗上口写,供给在REGEXP之后、表明式早前加BINAHavalY关键字

  • 检索八个字符串之生机勃勃

    • 使用|将五个字符串分隔断
    • 假若满意当中四个字符串就能够回到结果
  • 查找多少个字符中的三个字符

    • 使用[]将五个字符括起
    • 只要相称字符聚集的几个字符就可以回到结果
    • ‘[1a2b]’等同于’[1|a|2|b]’
    • 使用[0-9]相配0到9时期的轻巧数字,可自定义范围
    • 使用[a-z]相称a到z之间的大肆字母,可自定义范围
    • 在汇聚的始发处(在[]内部)放置^标识表示否认,将会相称除字符聚集的字符以外的字符
  • ‘[1|2|3] sth.’ 将会相配1 sht.或2 sth.或3 sth.

  • ‘1|2|3 sth.’ 将会相称1或2或3 sth.

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

  • 大部分DBMS中动用反斜杠()表示转义,但MySQL供给选取双反斜杠()表示转义

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

空荡荡元字符

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

除了COUNT(*卡塔尔国之外,别的的多少个函数在思考时都忽视表明式中的空值(NULL行)。 

字符类(预约义字符集)

字符类 说明
[: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函数是用来测算数据表中某一列的属性值的总的数量。 

比超级多个实例

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

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

 

牢固元字符

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

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

 

拼接字段

  • 在 SELECT 之后、FROM 在此以前使用 Concat(卡塔尔(英语:State of Qatar)函数拼接字段(列)

  • 将在查询并拼接的多少个列名和任何要插入的字符(举例括号等)作为
    Concat(卡塔尔(قطر‎的参数

  • 依次参数之间利用逗号分隔

  • 比超级多DBMS使用 || 恐怕 + 来兑现拼接,但MySQL使用 Concat(卡塔尔(قطر‎函数

  • 在拓展SQL语句转变时索要专一那大器晚成不相同

  • MySQL函数能够嵌套使用

  • 运用 Trim(卡塔尔(قطر‎函数来去除查询结果中两侧的保有空格

  • 采纳 LTrim(卡塔尔(英语:State of Qatar)函数来去除查询结果中上手的富有空格

  • 接收 RTrim(卡塔尔(قطر‎函数来去除查询结果中侧边的有所空格

  • 函数参数为要物色的列名

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

别名(alias)

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

FROM T_teacher

MySQL算数操作符

操作符 说明
+
*
/

能够选择圆括号分别运算优先顺序

 

SELECT测试

  • MySQL中SELECT语句能够大约FROM子句直接访谈和管理表达式,以便试验

聚合函数只可以出以后SELECT语句、GROUP
BY子句甚至HAVING子句中,WHERE子句中无法现身聚合函数。

SQL函数

  • 函数的移植性比不上SQL语句,分化DBMS之间函数差别非常大
  • 在利用函数时应当加强代码注释,以便未来的改换职业

 

常用的文本处理函数

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

Soundex是将文本串调换为描述其语音表示的字母数字方式的算法,使得能够对串进行声张相比并不是字母比较

举个例子寻觅发音相同 Lie 的子串:

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

该寻找可以相配到发音与 Lie 相像的 Lee 、 Li 等

3.行使GROUP BY子句对表中数量实行分组

日期和岁月管理函数

函数 说明
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拍卖为二零零一-2069,将70-99甩卖为一九六九-1997,为制止歧义,使用标准格式

 

数值管理函数

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

单列分组 

SQL聚集函数

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

    • 运用标准的算术操作符,全部的聚焦函数都得以用来实践多少个列上的测算
    • 将列名和算术操作符组成的算数说明式作为函数参数,不要加多逗号、引号等
  • NULL处理

    • AVG(卡塔尔 函数忽视值为 NULL 的行
    • COUNT(*卡塔尔 不忽视值为 NULL 的行
    • COUNT(列名卡塔尔 忽视值为 NULL 的行
    • MAX(卡塔尔 函数忽视值为 NULL 的行
    • MIN(卡塔尔(英语:State of Qatar) 函数忽视值为 NULL 的行
    • SUM(卡塔尔(英语:State of Qatar) 函数忽视值为 NULL 的行
  • AVG()函数

    • AVG(卡塔尔(英语:State of Qatar) 只好用来规定特定数值列的平均值
    • 列名必得作为参数给出
    • 为了博取四个列的平均值,必得使用多个AVG(卡塔尔(قطر‎函数
  • COUNT()函数

    • 使用 COUNT(*卡塔尔(英语:State of Qatar) 对表中央银行的数目举办总计,不忽略 NULL 值
    • 动用 COUNT(列名卡塔尔(英语:State of Qatar) 对一定列的行开展计数,忽视 NULL 值
  • MAX()/MIN()函数

    • 能够拍卖非数值数据
  • 聚焦不一样的值,忽视重复值

    • 在汇聚函数参数的第三位加多 DISTINCT 只对分化的值实行计算
    • v5.0.3及以上
    • DISTINCT 后必需跟有列名,不得以用来总计照旧表明式
    • COUNT(*) 无法采用 DISTINCT
    • 将 DISTINCT 用于 MAX(卡塔尔(英语:State of Qatar)/MIN(卡塔尔(قطر‎ 函数未有实际意义
  • 组成集中函数

    • SELECT 语句可以依据要求包涵多个聚众函数
    • 各个聚集函数之间用逗号分隔

选拔GROUP
BY子句对数据表中的某一列实行分组时,会对点名分组的列中不相同的值都精兵简政出二个总括结果。其语法格式如下: 

分组数据

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 

WHERE 和 HAVING

  • WHERE 过滤行,HAVING 过滤分组。WHERE 中尚无分组的定义
  • HAVING 援救具有 WHERE 操作符
  • WHERE 在数量分组前开展过滤,HAVING 在数码分组后张开过滤

在那之中列名1表示必要对该列进行分组操作。 

GROUP BY 和 ORDER BY

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

诚如在运用 GROUP BY 子句时,应该也提交 OTiggoDEHighlander BY
子句,那是保障数据准确排序的并世无双办法。

 

SELECT子句顺序

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

 

子查询

MySQL 4.1引进了对子查询的扶植。

查询

别的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… 

内部列名1和列名2表示需求对点名列进行分组操作。列名1和列名2之间用逗号进行划分。 

利用HAVING子句子节制分组后的询问结果 

借使想要对分组后的结果限定查询条件,就必要采纳HAVING子句。由于HAVING子句是用来界定分组后的询问结果,所以该子句需求安置GROUP
BY子句的末端使用。其语法格式如下: 

GROUP BY列名1 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汉兰达DEENCORE 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

 

4.施用ROLLUP关键字计算数据

 

在骨子里运用中,有时不唯有须求拿到分组后的总计结果,还希望对分组的总括结果做越来越的乘除,举个例子通过对教师职员和工人音讯表(T_teacher)中的学校和名师职务名称举行分组,获得分组后老师的薪俸,还期望对每三个院系中的教授的薪水做三个阶段性的总括,希望获得各种学园中不相同职衔的园丁的工薪的加和(也正是小计),犹盼望得到全数学校不相同职衔教授薪俸的总和(也等于计算)。那时候只是使用GROUP
BY子句是回天无力完结的,那时候就必要动用ROLLUP关键字。 

ROLLUP关键字选取时必要停放GROUP
BY关键字的背后。ROLLUP关键字在分化的数据库中的使用方法上稍有不一致。 

a.在MySQL和Microsoft SQL Server数据库中须求动用WITH
ROLLUP。其语法格式如下:

 

 

GROUP BY 列名1 WITH ROLLUP

 

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

GROUP BY 列名1 ,列名2 WITH ROLLUP 

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

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

 

5.约束结果集行数

 

有些时候,开荒职员恐怕顾客并不期待将查询结果的数据列中的数据总体来得出来,而是只愿意展现中间的几行,特别是在须求分页的操作中。比如,三个数据表最终查询出了100条记下,而开垦人士可能客商只关注在那之中前10条记下的值,那就需求对查询结果中的数据记录的行数进行节制。在分化的数据库中限定结果集行数的法门也不尽雷同。 

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条到第6条记下

 

b.Oracle数据库中不扶植相仿于 MySQL 中的
LIMIT关键字来节制结果集行数,然则在
Oracle数据库中能够应用ROWNUM关键字限定结果集的行数。其语法格式如下: 

WHERE ROWNUM<n 

内部ROWNUM关键字表示对符合条件结果的队列号,它的开头值总是从1从头的。数字n表示要界定的结果集的行数。当然,这里的比较运算符除了能够采纳(<)小于以外,还足以接纳(<=)小于等于。 

c.MySQL数据库和Oracle数据库中应用LIMIT关键字和ROWNUM的诀窍限定结果集行数,在Microsoft
SQL Server数据库中需求接受TOP关键字。其语法格式如下: 

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

FROM 表名 

… 

当中,TOP是代表节制结果集行数的主要字;数字n表示约束结果集行数;PRECENT关键字表示回去查询的结果集中前n%的行数,它是可选的。

使用SQL语句推行查询操作时,我们大概发掘查询出的数目结果的排序是冬日的。为了更加好的洞察数据表中的询问结果…

发表评论

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