当前位置: 凤凰彩票登陆 > MySQL数据库 > 正文

常用的放置函数,必知必会学习入门

时间:2019-09-23 14:43来源:MySQL数据库
3.过滤关键字 where + 操作符 where子句操作符表:  操作符  说明  =  等于    不等于  !=  不等于    小于  =  小于等于  !  不小于    大于  =  大于等于  !  不大于 BETWEEN 在指定的

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

 

成立高档联结

   3.开立表及约束原则

 

结缘查询

非常多 SQL 查询都只含有一个或四个表中回到数据的单条 SELECT 语句,MySQL 也同意试行两个查询(多条查询),并将结果作为单个查询结果集重回,那么些组合查询交通称为并 (union) 或复合查询(compound query).
有三种基本气象,个中须要运用组合查询:

  • 再单个查询中从差异的表再次回到类似结构的数目
  • 对单个表试行七个查询,按单个查询重临数据

  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。

  - 能够统一多少个表实行插入数据操作。

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

(3)两端相配
询问出含有字母“c”的装有数据:SELECT * FROM table_name WHERE COLUMN LIKE '%c%'

创建表

MySQL 不仅仅用于表数据操作,并且仍可以用来推行数据库和表的具备操作,富含表自个儿的开创和拍卖。

创设表的点子:

  • 使用全数交互式创立和管理表的工具
  • 接纳 MySQL 语句垄断(monopoly)
  1. 表创造基础(CREATE TABLE)
    • 新的标记名再主要字 CREATE TABLE 之后给出
    • 表列的名字和定义,用逗号分隔
  2. 使用 NULL 值: Null 值正是从未值恐怕缺值,允许 NULL 值的列也允许再插入行时不提交该列的值,不允许 NULL 值的列不接受该列未有值的行,换句话说,在插入或更新行时该列必得有值。NULL 为暗中认可值,假若不点名 NOT NULL, 则认为内定的是 NULL, NULL 值正是从未值,他不是空荡荡,空串是贰个卓有成效的值。
  3. 主键: 主键的值必得独一,即,表中的种种行必需具有独一的主键值,假如主键使用单个列,则他的值必得独一,假诺运用多少个列,则那么些列的组合值必需独一。
  4. 使用 AUTO_INCREMENT: 告诉 MySQL ,本列每当增添一行时自动增量,每一趟实施三个 INSERT 操作时, MySQL 会对该列增量,各个表只允许三个 AUTO_INCREMENT列,何况她必需被索引

四、MySQL查询操作

1、“%”通配符:表示任性字符的相配,且不计字符的有些。
(1)开始、结尾相配
开头相配(以字母“c”早先的具备数据):SELECT * FROM table_name WHERE COLUMN LIKE 'c%'
末段相称(以字母“c”结尾的持有数据):SELECT * FROM table_name WHERE COLUMN LIKE '%c'

删除表 (DROP TABLE)

三、MySQL表操作

 

更新和删除数据

  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;

只顾:分离数据库是将数据库文件从SQL Server中分离出来,而除去数据库是将数据库文件删除。

联合四个表

SQL 对一条 SELECT 语句中得以统一的表的数据未有限制,创立联结的骨干准则也同样,首先列出具备表,然后定义表之间的关系。

  1.GROUP BY

  - GROUP BY子句能够分包自由数目标列。

  - GROUP BY会在结尾分明的分组上进展汇总。

  - GROUP BY子句列出的各种列都必需是寻觅列或有效的表明式(但不可能是聚合函数)。

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

  - 假诺分组列中兼有NULL值,则NULL将作为三个分组再次回到;假若列中有多行NULL值,它们将分为一组。

  - GROUP BY子句必需出以往WHERE子句字后,OCR-VDE卡宴 BY子句此前。

  一般在动用GROUP BY子句时,应该也给出O冠道DER BY子句,以保障数据精确排序。

 

数据库入门

数据库: 保存有协会的数码的器皿(平日是三个文本或一组文件).数据库软件应该叫做 DBMS(DataBase Manage System) 数据库管理种类,数据库是指通过 DBMS 成立和操纵的器皿,数据库能够是保留在硬盘上的公文,但也能够不是。你不能够间接待上访谈数据库,而是利用 DBMS 来访谈,他替你拜望数据库。

表: 某种特定项目数据的结构化清单。存款和储蓄在表中的数码是一类别型的数额或一个清单,数据库中的每一种表都有二个名字,用来标记自个儿,此名字是唯一的,这意味数据库中从不其余表具备同一的名字。

表具备局地表征,这个特定定义了数码在表中怎么着存储,如存款和储蓄什么样的数目,数据怎么样分解,个部分新闻如何命名等等,描述那组消息就是所谓的情势
方式: 关于数据库和表的布局及特色的消息.

列:表中的一个字段,全部的表都以由三个或七个列组成的。
数据类型: 所或许的数码的门类,各类表都有相对应的数据类型,他限制(容许)该列中存款和储蓄的多少。数据类型限制可存款和储蓄在列中的数据种类,数据类型还推推搡搡科学的排序数据,并在优化磁盘使用方面起初要的意义,由此,在创造表时必须对数据类型给予特别的关心

行:表中的一个记下,
主键:一列(或一组列),其值能够独一区分表中的每一个行。独一标识表中每行的这么些列称为主键,主键用来代表三个一定的行,未有主键,更新或删除表中一定行很辛劳,因为尚未平安的点子保障只涉嫌相关的行。表中的别样列都能够视作主键,只要它满意以下标准:

  • 别的两行都不辜负有同等的主键值
  • 每一个行都必得有所一个主键值(主键值不允许 NULL 值)。

SQL: 结构化查询语言(Structured Query Language),是一种特别用来与数据库通讯的言语。

  Linux安装MySQL

  

                          实体完整性约束
  约束连串                                      作用描述
  PHighlanderIMAPRADOY KEY(主键)约束                         独一识别每一条记下的注解,能够有多列共同整合
  IDENTITY(自增)约束                            列值自增,一般采取此属性设置的列作为主键
  UNIQUE(独一)约束                              能够选择UNIQUE约束确认保障在非主键列中空中楼阁重复值,但列值可以是NULL(空)
  
  
                     域完整性约束
  CHECK(检查)约束                                用于限制列中值得范围
  FOREIGN KEY(外键)                              多少个表中的FORENIGN KEY 指向另一个表中的P奥迪Q5IMA迈凯伦720SY KEY
  DEFAULT(暗许值)约束                            用于向列中插入暗中认可值
  NOT NULL(非空)约束                             用于强制列不接受NULL(空)值
  
  
  
注意:
1、PGL450IMAPAJEROY KEY用于将表中的某类设置为主键,一张表中只有一个主键,主键能够是一列或由多列组成。
2、NOT NULL是对列值进行界定,即在表中添增添少时不允许有NULL值。
3、CHECK约束的语法规则:CHECK(表明式)
外键的应用:字段名 数据类型 [FOREIGN KEY] REFERENCES 表名(字段名)
  
向数据库中增加值:
语法:INSERT [INTO] table_name [(COLUMN1,COLUMN2,.....)] VALUES (VALUE1,VALUE2,.....)
注意:
1、VALUES需要与COLUMN对应
2、添增加少时,借使字段类型为varchar或datetime,不然必需利用单引号('')引起来。
3、即使尚无出示地增添IDENTIEnclaveY约束字段,不过数据库会活动遵照IDENTITY准则加多数据

MAX() 函数

MAX() 再次回到钦点列中的最大值,MAX()渴求钦定列名,

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

表的着力链接
1、两表链接:SELECT * FROM table_name1 [AS] a,table_name2 [AS] b WHERE a.ID=b.ID
2、多表链接:SELECT * FROM table_name1 [AS] a,table_name2 [AS] b,table_name3 [AS] c WHERE a.ID=b.ID AND b.ID=c.ID
注意:
1、使用SQL Server关键字作为表名、列名时,供给使用"[]"括起来。比如Order为SQL Server关键字,若须求创制一张名伟Order的表,则写为"CREATE TABLE [Order]"
2、SELECT语句首先推行FROM子句,由于定义表小名是在FROM子句中实行,而在其余子句中利用,所以在SELECT语句的任何子句中都能够使用表的别称。

多少过滤

协会 WHERE 子句创设职能更加强的更加高端的检索条件,MYSQL 允许几个 WHERE 子句,那么些子句能够以三种方式接纳: 以 AND 子句的秘诀依然以 O君越子句的章程采纳。操作符用来链接只怕转移 WHERE 子句中的子句的主要字,也叫做逻辑操作符

  1. AND操作符: SELECT prod_id,prod_price FROM products WHERE vend_id = 1003 AND prod_price <= 10;

  2. OR操作符: O瑞虎 操作符与 AND 操作符区别,它提示 MySQL 检索相称任意条件SELECT prod_id FROM products WHERE vend_id=1002 OR prod_price=1003

  3. 计算次序: SELECT prod_name FROM products WHERE (prod_id=1002 OR prod_id=1003) AND prod_price>10, AND 的企图次序要事先于 OR ,所以需求将 OR

  4. IN操作符: IN 操作符用来钦点条件限制,范围内的每种条件都得以举行匹配, IN 取合法值的由逗号分隔的清单,全都括在圆括号中。SELECT prod_name FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name 其实 INOR 的功用雷同。那么为啥要接纳 IN 操作符呢?

    • 在选取长的合法选项清单时,IN 操作符的语法更精通且越来越直观
    • 在运用 IN 时,总括的顺序更便于管理
    • IN 操作符一般比 OSportage 操作符清单实行越来越快
    • IN 的最大亮点是足以蕴含别的 SELECT 语句,使得能够改换态地建构 WHERE 子句
  5. NOT操作符:NOT 操作符用来否认它未来所跟的别的条件 SELECT prod_name FROM products WHERE vend_id NOT IN(1002,1003)

  2.数据库范式:

  数据库范式即数据库应该坚守的条条框框。如今关全面据库最常用的种种范式分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCN范式(BCNF)。

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

  第二范式:数据库表中的具有列都必得信赖于主键,那意味四个表只描述一件事情。

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

  BCN范式:Boyce-Codd,不容许出现存主键的一部分被主键另一有个别依然别的一些决定。即二个表中只可以有一个主键。

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

  要是货仓管理涉及表为StorehouseManage(货仓ID, 存款和储蓄货色ID, 管理员ID, 数量),且有一个管理员只在一个库房职业;三个储藏室能够累积三种物料。那些数据库表中留存如下决定涉及:

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

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

  所以,(旅舍ID, 存款和储蓄物品ID)和(管理员ID, 存款和储蓄货品ID)都以StorehouseManage的候选关键字,表中的独占鳌头非关键字段为数据,它是契合第三范式的。不过,由于存在如下决定涉及:

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

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

  即存在重大字段决定第一字段的动静,所以其不适合BCNF范式。

查询语句语法结构
语法:SELECT <COLUMN1,COLUMN2,.....> FROM <table_name> [表达式] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]
OCRUISERDE奥迪Q3 BY 子句用于对查询结果进行排序。ASC表示升序,DESC表示降序排列,私下认可的排序是ASC.
瞩目:将查询获得的结果叫做结果集(RecordSet).SQL Server对大小写不灵动,包蕴主要字在内。举例,SELECT、select和Select是一律的。

联结表

SQL 最强劲功用之一就是能在数据检索查询的实践中集合(join)表,联结是接纳SQL 的 SELECT 能施行的最主要的操作,很好地领略联结及其语法是读书 SQL 的多个极为主要的组成部分。

  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的值 小数值

总计:GROUP BY 主固然用以分组之后,再经过聚合函数到手对应的值。GROUP BY后边的字段首固然分组的依附,
当得到独一项之后再实施SELECT后的聚合函数到手对应的值。GROUP BY 能够通过典型来收获钦点的组,
例如:SELECT EmployeeID,min(OrderDate) FROM  table_name WHEER price =value GROUP BY EmployeeID
另一种用法:Group By All [COLUMN]
SELECT EmployeeID,min(OrderDate) FROM  table_name WHEER price =value GROUP BY All EmployeeID
分组好之后显得相应的项
聚合函数会依据重回值的连串用私下认可值0依然NULL来顶替聚合函数的重返值。
留神:当GROUP BY子句中用来分组的列中出现了NULL值时,会将兼具的NULL值分别在同
一组,即认为她们是“相等”的

COUNT() 函数

COUNT() 函数举办计数,可使用 COUNT() 分明表中行的数目或符合特定条件的行的数码。COUNT()函数有两种采用办法

  1. 使用 COUNT(*) 对表中央银行的数量举办计数,不管表列中包含的是空值(NULL)照旧非空值。
  2. 使用 COUNT(column) 对一定列中具备值的行进行计数,忽略 NULL 值。

  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;

 

更改表(ALTER TABLE)

  1. 增加列: ALTER TABLE vendors ADD vend_phone CHAR(20)
  2. 删除列: ALTER TABLE vendors DROP COLUMN vend_phone

  1.查询关键字 SELECT FROM

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

荒唐写法:SELECT EmployeeID,MIN(price) FROM table_name GROUP BY EmployeeID HAVING MIN(price)>100 AND OrderID>5
破绽百出提醒:选拔列表中的列 'table_name.OrderID' 无效,因为该列未有包罗在聚合函数或 GROUP BY 子句中。
爆发错误的开始和结果:不可能将单个的OrderID的值应用于组,包涵在HAVING子句中的列必得是祖列。此时,WHERE子句不能够用HAVING子句替代。
为了拿走所需的结果,须求需改如下:
SELECT EmployeeID,MIN(price) FROM table_name WHERE OrderID>5 GROUP BY   EmployeeID HAVING MIN(price)>100

WHERE 子句的首要

请记住:在一条 SELECT 语句中联合多少个表时,相应的涉及是在运作中布局的,在数据表的概念中不真实能提醒MySQL 怎样对表实行联合的事物,你无法不团结做这件业务,

笛Carl积 由未有统一条件的表关系重临的结果为笛Carl积,检索出的行的多寡将是第叁个表中的行数乘以第贰个表中的行数。

  1.文本管理函数

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

   - 用例: 

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

                                    数学函数
  函数名                  示例                                                   函数成效
   Abs                     Abs(-1)结果回到“1”                                     求相对值
  Ceiling                 Ceiling(24.1)结果回到“25”                              大于24.1的细微整数     
  Floor                   Floor(24.1)结果回到“24”                                小于24.1的最大整数
  Power                   Power(2,3)结果回到“8”                                  总括2的3次方
  Round                   Round(748.32,1)结果回到“748.30”                        重临二个数值,舍入到内定的尺寸或精度
  Sign                    Sign(100)结果回到“1”                                   正整数重临1,负整数重返-1
  Sqrt                    Sqrt(4)结果回到“2”                                     开平方

基础操作

  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 会自动进行具备的目录和另行索引。在目录之后,SELECT 与 Match() 和 Against() 一齐利用以机缘推行找出。

  4.SQL语言:

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

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

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

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

  

插入数据

应用 INSERT 语句将数据插入表中, INSERT是用来插入(或加上)行到数码库表的,插入能够用集中情势选取

  1. 安顿完整行,使用 INSERT ,需求钦赐评释和被插入到新行的值,最佳是写上列名,那样能够保障列明是科学的。
  2. 插入两个行: INSERT 可以插入一行到三个表中,若是想叁次性插入多行的话,就须求采纳多少个INSERT 或许选择单条 INSERT 语句有多组值,每组值用一对圆括号括起来

   2、数据管理函数

(3)"_"与"%"的回顾应用
在模糊查询过程中,平日需求"_"和"%"一同使用本事一呵而就查询功能。
示范:查询名称(name)第三个假名称叫"c"的持有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE '_c%'

汇聚数据

MySQL 查询可用来检索数据,以便解析和表格生成,那类别型的物色例子有以下两种:

  • 规定表中央银行数(可能满意某些条件或带有有个别特定值的行数)
  • 获取表中行组的和
  • 搜索表列(或享有行或一些特定的行)的最大值,最小值和平均值
    那么些事例都亟需对表中数量集中。为了寻觅上述的门类, MySQL 给出了5个聚众函数。聚拢函数运作在行组上,总括和重临单个值的函数。

  3、分组关键字 GROUP BY 和HAVING

两岸的结果完全一致,都以回去多条数据记录。可是,与OEvoque运算符比较,IN运算符具有以下七个优点:
(1)当接纳标准非常多时,选取IN运算符将十分疼快,只须要在括号中用逗号间隔后叁次位列就可以,运转作效果能高于OPAJERO运算符。
(2)IN运算符后边所列的条件可以是另一条SELECT语句,即子查询。

数值管理函数

数值管理函数仅处理数值数据,那么些函数一般首要用于代数,三角或几何运算.

  • Abs(). 再次来到贰个数的相对值
  • Cos()再次回到二个角度的余弦
  • ...

  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;

 

2、外接连:无论是内接连依然带WHERE子句的多表查询,都只回去相相称的多少(内接二连三和外接连的分歧)。即即便别的多个源表中的行
在另一个源表中尚无相配,则系统不会将该行放在最终的结果中,而在外连接系统生成的结果表中, 不止包括符合条件的行,还满含左表、
右表、或五个表中享有的数据行。
(1)左外连接(LEFT [OUTER] JOIN)
左外连接除了包罗相配的行之外,还包含JOIN关键字左表中不相配的行,当中,右表中远远不够的性质值用NULL值表示。左表连接暗中提示图如下:
                                              
             
      TB_A                                     TB_B
                A      B      C                                C       D
    a1     b1     c1                               c1      d1
    a2     b2     c2                               c2      d2
    a3     b3     c3
               
           TB_A LEFT [OUTER] JOIN TB_B ON TB_A.C=TB_B.C
      A      B      C       C       D
         a1     b1     c1      c1      d1
         a2     b2     c2      c2      d2
         a3     b3     c3      NULL     NULL
     
UNION运算符
UNION运算符用于实践会集的“并”运算。
语法:SELECT * FROM table_name1 WHERE <表达式> UNION SELECT * FROM table_name1 WHERE <表达式>
内接二连三达成多表连接
语法:SELECT * FROM table_name1 Orders o INNER JOIN Details od ON o.OrderID=od.OrderID INNER JOIN Employees e ON e.EmployeeID=o.EmployeeID

除去数据

为了从三个表中删除(去掉)数据,使用 DELETE 语句,可依二种艺术选用 DELETE

  • 从表中删除特定的行 DELETE FROM products WHERE cust_id = 1006

  2.封锁原则

  约束是为了保险数据的完整性和一致性,约束类型富含:

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

 

2、SELECT 后三个聚合函数情景
亲自过问:从订单表Orders中查询各种员工最先的订单时间(OrderDate)和选购最平价的标价(price)。职员和工人ID为(EmployeeID)
SELECT EmployeeID,min(OrderDate),min(price) FROM table_name GROUP BY EmployeeID
规律:当实践时首先在表中询问职员和工人ID(EmployeeID),然后将一样的ID合併为三个。当有着的ID都唯不时,那时便开首通过聚合函数到手
职员和工人的最初订单时间,接着再通过聚合函数到手最方便的价位。

始建和垄断表

  常见数据库

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

单列排序:SELECT * FROM table_name ORDER BY
多列排序;SELECT * FROM table_name ORDER BY COLUMN1 DESC,COLUMN2 DESC....

MIN() 函数

MIN() 的功效正好与 MAX() 作用相反,他回到钦赐列的小小值,与 MAX() 同样,必需钦点列名

  2.排序关键字 ORubiconDE途乐 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;

一回添加多行数据
语法:
INSERT [INTO] tabale_name([COLUMN1,COLUMN2,.....])
SELECT VALUE UNION
SELECT VALUE

一时和岁月管理函数

光阴和日期选取相应的数据类型和特有的格式存款和储蓄,以便能快速和实惠排序或过滤,何况节省物理存款和储蓄空间,一般,应用程序不使用用来积存日期和岁月的格式,因而日期和岁月函数被用来总括,读取和拍卖这个值。

  • AddDate() 扩大贰个日期(天,周等)。
  • AddTime() 增添贰个时刻(时,分等)。等,,,,。

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

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

  数据库管理类别(DataBase Management System, DBMS)是用来定义、管理和保卫安全数据的软件。它是数据库系统的关键组成部分。数据库管理种类经过SQL语言来治本数据库中的数据。

利用实例:SELECT SUM(COLUMN) FROM table_name

创办组合查询

可用 UNION 操作符来整合数条 SQL 查询,利用 UNION, 可提交多条 SELECT 语句,将它们的结果组合成单个结果集。

使用 UNION : 用法,给出每条 SELECT 语句,在各条 语句之间放上关键字 UNION
UNION 规则: UNION 必须由两条或两条以上的 SELECT语句组成,语句之间用关键字 UNION 分隔,UNION 中的各个查询必得带有同样的列,表明式或集中函数。
带有或撤消重复的行: UNION 查询时回机关删除重复的行,借使想要重回全部的相称行,可应用 UNION ALL 而不是 UNION.
对组合查询结果排序: SELECT 语句的输出用 ORDER BY子句排序,在用 UNION组成查询时,只可以利用一条 OLacrosseDECRUISER BY 子句,他必需出未来最终一条 SELECT 语句之后,对于结果集,不设有用一种格局排序一部分,用另一种反式排序另一部分。

  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;

HAVING子句
GROUP BY子句只是简短地依据所选列的多寡实行分组,将该列具备同样值的行划为一组。而实际上选取中,
频仍还必要删除不满足条件的组,SQL提供HAVING子句来贯彻该意义。
示例:SELECT EmployeeID,MIN(price) FROM table_name GROUP BY EmployeeID HAVING MIN(price)

问询数据库和表(SHOW)

  1. SHOW DATABASES: 重回贰个数据库列表,包括在那么些列表中的恐怕是 MYSQL 内部使用的多少库.
  2. SHOW TABLES: 重回当前选用的数据库内可用表的列表
  3. SHOW COLUMS FROM customers: 必要付诸三个表名,对各类字段重回一行。包罗 该字段的音信。

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

修改表中的数据
语法:UPDATE table_name SET COLUMN1={},COLUMN2={},.... WHERE<表达式>

履新数据

为了立异(修改)表中的数据,可使用 UPDATE 语句,可应用二种办法利用 UPDATE:
使用 UPDATE 的时候自然要专一,绝不简单 WHERE 子句,使用 UPDATE 语句总是以要更新的表的名字开头.要以 WHERE 子句(用来报告 MySQL 更新哪一行)结束。在更新四个列时,只须要运用单个 SET 命令,每个 列=值对中间用逗号分隔(最终一列其后不要逗号);

  • 更新表中一定行
  • 更新表中保有行

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

 
漏洞非常多查询
在SQL Server中,通过应用通配符来完结LIKE运算,通配符“%”,“_”,“[]”。
瞩目:独有char、varchar和text类型的多寡技术选拔LIKE运算符和通配符。

使用子查询

SQL 允许成立子查询,即嵌套在其余查询中的查询

SELECT 语句中,子查询总是从内向外管理,在拍卖方面包车型大巴 SELECT 语句时, MySQL 实际上实践了五个操作

SELECT order_num FROM orderitems WHERE prod_id = 1;
SELECT cust_id FROM orders WHERE order_num = 1;
SELECT * FROM customers WHERE cust_id = 1;

SELECT * FROM customers WHERE cust_id IN (
  SELECT cust_id
  FROM orders
  WHERE order_num IN (
    SELECT order_num
    FROM orderitems
    WHERE prod_id = 1
  )
);

即便子查询一般与 IN 操作符结合使用,但也能够用来测量检验极度(=),不对等(<>) 等。

  4.修改表结构

 

SUM() 函数

SUM() 函数用来回到钦赐列值的和(计算),SUM()也足以用来交涉总计值

  1、查询数据

 

搜索数据(SELECT)

从八个或多个表中检索新闻,为了选拔 SELECT 检索数据,必需至少给出两条数据 -- 项接纳什么样,以及从如什么地点方选取。

  1. 探寻单个列: SELECT prod_name FROM products

  2. 搜寻多少个列: SELECT prod_id,prof_name FROM product

  3. 查找全体列: SELECT * FROM product

  4. 探索不一样的行: SELECT DISTINCT vend_id FROM products, DISTINCT 关键字必得一向情势在列名的先头

  5. 界定结果: LIMIT :

    • SELECT prod_name FROM products LIMIT 5
    • SELECT prod_name FROM products LIMIT 5,5
  6. 应用完全限定的表名: SELECT products.prod_name FROM crashcourse.products;

  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;

 

缘何要选取联结

演说数据为三个表中,更有益地拍卖,并且有着越来越大的可伸缩性。

采纳联结,能够用单条 SELECT 语句检索出多少,联结是一种机制,用来在一条 SELECT 语句中关联表,由此称为联结,

SELECT vend_name,prod_name,prod_id,prod_price FROM vendors,products WHERE vendors.vend_id = products.vend_id;

  4、关键字顺序

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

   在贯彻SQL语句时,通用格式为:

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

  实际试行的次第为:

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

# 注:数据表来自

图片 1图片 2

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

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

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

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

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

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

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


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

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


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

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

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

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

数据表

 

 

履新和删除的点拨原则

假设实行 UPDATE 而不带 WHERE 子句,则表中每行都将运用新值更新,类似的,要是实践 DELETE 语句而不带 WHERE 子句,表的具备数据都将被删去。

  • 只有缺点和失误盘算更新和删除每一行,不然相对不要采取不带 WHERE子句的 UPDATEDELETE语句
  • 管教各类表都有主键,尽或然像 WHERE子句那样选择它
  • 在对 UPDATE 或 DELETE 语句使用 WHERE 子句前,最佳先用 SELECT 进行测量试验,保险它过滤的是科学的记录,以免止编写的 WHERE 子句不得法
  • 利用强制施行援引完整性的数据库,这样 MySQL 将差异意删除全体与任何表相关联的数额的行。

  1.数据库:

  数据库(DataBase)就是三个仓库储存数据的货仓,为了有利于数据的囤积和治本,它将数据依据一定的原理存款和储蓄在磁盘上。通过数据库处理体系,能够有效的团组织和管制存款和储蓄在数据库中的数据。数据库是数量管理软件。数据存款和储蓄分为四个等第:人工管理阶段、文件系统阶段和数据库系统阶段。

3、GROUP BY后五个字段意况
实例:SELECT MAX(C) FROM table_name GROUP BY A,B
规律:当实行时先对A举行分组借使A中有雷同项,则始于对B举行分组。假如A、B同一时候出现同样项。则将长久以来项联合,留下二个独一项。
若A出现一样项,B为不一样项。则此时不开展合并,保留此时的项。当A、B分组截止后,则始于通过聚合函数寻觅分组好后C的最大项。

动用函数

比比较多 SQL 完成帮忙以下项指标函数:

  • 用来拍卖文本串(删除或填充钱,调换值为大写或小写的文书函数)
  • 用以在数值数据上扩充算术操作(如相对值,实行代数运算)的数值函数
  • 用于拍卖日期和岁月值,况兼从那个址中领到一定成分
  • 归来 DBMS 正使用的超过常规规信心(如重返客商登入新闻,检查版本细节)的种类函数

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

  MySQL援救几种类型,大致能够分为三类:数值、日期/时间和字符串(字符)类型。

2、”_“通配符:”_“统配符的意义与”%“基本同样,只是它仅表示肆意三个字符(分化)的协作。若供给代表多个字符的特出,则应用几个”_“通配符,即写成”_ _“。
(1)相称二个字符
亲自去做:从表中查询名称(name)为”t_fu“("_"代表私下二个字符)的富有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE 't_fu'     相配字符串有(tafu,tbfu,tcfu.....)

用正则表明式来进展查找

带学

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

查询范围行TOP N
语法:SELECT TOP N <COLUMN1,COLUMN2,.....> FROM <table_name> [WHERE <表达式>] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]
查询百分比
语法:SELECT TOP N PERCENT <COLUMN1,COLUMN2,.....> FROM <table_name> [WHERE <表达式>] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]

动用数据管理函数

MySQL 帮衬使用函数来管理数据,函数一般是在数量上进行的,它给多少的更动和管理提供了有益。函数未有SQL 的可移植性强,好些个的 SQL 语句是可移植的,在 SQL 完结之间有差别时,那些差别经常不那么难管理,而函数的可移植性却不强,

  2.创新和删除数据 UPDARE DEL

  UPDATE能够:更新表中一定行,更新表中具备行。在尚未where子句时,UPDATE会更新具备记录。

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

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

  DELETE用于按行删除记录,它自个儿不会修改表结构。

  注:在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT举办测量检验,以保障它过滤的是真正要刨除的笔录。

(2)相配多个字符
询问名称(name)为3个字符的数目SQL语句如下:
SELECT * FROM table_name where name LIKE '_ _ _'
注意:"_"只可以合营贰个字符。

成立分组

分组是在 SELECT 语句的 GROUP BY 子句中国建筑工程总集团立的。

SELECT country, COUNT(*) AS num_prod FROM products GROUP BY country;

使用了 GROUP BY子句时,须求驾驭有个别重大的明显。

  • GROUP BY 子句可以包罗自由数指标列,那使得能对分组实行嵌套,为数据分组提供更稳重的操纵。

一、基本概念

 

关系表

提到表的规划正是要确认保证把音信分解成八个表,一类数据三个表,各表通过一些常用的值(即关系安顿中的关系)相互关联。

外键:外键为某些表中的一列,他满含另贰个表的主键值,进而定义了七个表之间的涉嫌。
可伸缩性:能够适应不断充实的职业量而不退步,

  版本分类

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

  阿尔法暗指那是二个以显示新天性为目标的本子,存在非常多的不安静因素,还或然会向代码中增多新新特征

  beta 现在的beta版、揭橥版或制品发表中,全体API、外界可视结构和SQL命令列均不再更动,不再向代码中增添影响代码稳固性的新特征。Gamma比Beta版更加尖端。

  GA若无后缀,则暗指那是贰个超过二分一场地下可用版本也许是产品版本。. GA releases则是牢固版。

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

条件查询注意:
1、在七个WHERE子句中,能够并且使用四个AND运算符链接多少个查询条件。
2、在“(表明式1)O昂Cora(表达式2)”中,假如表明式1为TRUE,将不再实施表明式2。

作为计量字段使用子查询

使用子查询的另一措施是开创字段。

SELECT cust_name, cust_state,(SELECT COUNT(*) FROM orders WHERE cust_id = customers.cust_id) AS orders FROM customers;

                                    日期函数
        函数名                  示例                                                  函数作用
        GetDate                 GetDate结果重临“当前几天期”                             再次来到当前天子
        DateAdd                 DateAdd(mm,2,'2010-10-08')结果回到‘2009-12-08’        向日期钦定部分增添数字,在那之中,yy表示年、mm表示月、dd表示日
  DateDiff                DateDiff(dd,'二零零六-09-09','2009-09-09')结果回到‘365’   再次回到多个日子之间的距离,当中,yy表示年、mm表示月、dd表示日
  DateName                DateName(DW,'二〇〇八-09-09')结果重临“星期四”             以字符串的款式重临有些日期内定的部分
  DatePart                DatePart(DW,'二零零六-09-09')结果回到“4”                  以卡尺头试样重临有个别日期钦命的一些
  
实例:获取系统当下日子函数为GetDate(),表达式能够写为“COLUMN1<GetDate()”,SQL语句如下:
SELECT * FROM table_name WHERE COLUMN1<GetDate()

分组数据

使用分组来汇总表内容的子集,使用 SELECT的子句 GROUP BYHAVING 子句。

IN运算符
若只须求知足两个条件中的二个查询条件,则能够选择IN运算符。IN运算符允许依据一行记录中是或不是有一列包蕴在一类别值之中而选择改行。
享有的准绳罗列在IN运算符之后,并以园括号括起来,各样条件之间利用逗号分开。
示例:
查询ID为1、3或4的数据:SELECT * FROM table_name WHERE ID IN (1,3,4)
注意:
在大多数气象下,O本田UR-V运算符与IN运算符能够实现平等的功效。
示例:SELECT * FROM talbe_name WHERE ID=1 OR ID=3 OR ID=4

过滤分组

而外能选取 GROUP BY 分组数据外,MySQL 还允许过滤数组,规定富含怎么着分组,排除哪些分组。使用 HAVING 过滤分组

SELECT price, COUNT(*) AS price_larger FROM products GROUP BY price HAVING price LIKE '6_000';

SELECT子句顺序:

  • SELECT 要回到的列或表明式
  • FROM 从中寻觅数据的表
  • WHERE 行级过滤
  • GROUP BY 分组表达
  • HAVING 组级过滤
  • OKoleosDELAND BY 输出排序依次
  • LIMIT 限制检索的行数

表的连年类型
1、内链接:内接连也称等同连接,重返的结果集是三个表中装有相相配的数额,并丢弃不相称的多少(类似于地点的表的中坚连接)。
语法:SELECT * FROM table_name1 [INNER] JOIN table_name2 ON <表达式> [WHERE] [<表达式>]
示例:SELECT * FROM Categories INNER JOIN  Prouducts ON Categories.CategorID=Prouducts.CategorID
瞩目:INNEHighlander关键字能够总结。

AVG() 函数

AVG() 通过对表中央银行数计数并总结特定列值之和,求得该列的平均值,AVG()可用来回到全数列的平均值,也足以用来回到特定列或行的平均值。SELECT AVG(price) AS price_avg FROM products;

 

排序检索数据

将会讲课怎样接纳 SELECT 语句的 OENVISIONDE奥迪Q5_BY 子句,依照必要排序检索出的数据.

子句(clause): SQL 语句由子句构成,有些子句是必需的,而有的是可选的,一个子句通常由一个关键字和所提供的数据组组成,子句的例子有 SELECT 语句的 FROM 子句。
  1. 单列排序: SELECT prod_name FROM products ORDER BY prod_id
  2. 多列排序: SELECT prod_name FROM products ORDER BY prod_price,prod_name, 排序完全依照所显明的逐条进行,也正是说仅在多行兼备一样的 price 的时候才会依赖 name 实行排序
  3. 钦赐排序方向: 数据排序不幸免升序顺序(A-Z),还是能利用 O宝马X5DEENCORE BY 子句以降序(Z-A)顺序排序,为了进行降序排序,必得钦命 DESC 关键字. SELECT prod_id, prod_price,prod_name FROM products ORDER BY prod_price DESC. DESC 关键字只可以选用到一贯放在其前方的列名。借使想要对多少个列上进行降序排列,必得对各种列内定DESC关键字。

                                  聚合函数(不可能做为WHERE条件)
   函数名称                                                        函数功效
   SUM                                                             重临选用结果集全部值的和
   MAX                                                             重临采取结果聚焦全数值的最大值
   MIN                                                             重返选用结果集中全数值的最小值
   AVG                                                             重返选取结果聚焦全部值的平均值
      COUNT                                                           再次回到采纳结果聚集央银行的多寡

成立总括字段

filed 能够与列的野趣一样,平常调换使用,但是数据库的列称为一般列,而术语平日用在图谋字段的总是上.

  1. 拼接字段: concatenate:将值连接到一齐构成单个值,消除办法是把八个列拼接起来,在 MySQL 的 SELECT 语句中,可应用 Concat() 函数来拼接八个列。Concat() 拼接串,即把八个串连接起来造成贰个较长的串,须求一个或多少个钦点的串,种种串之间用逗号分隔。
  2. 使用外号 SELECT Concat(...) AS newName FROM products
  3. 施行算数总结: 总结字段的另叁个广泛用途是对寻觅出的数量开展算术计算,

3、"[]"通配符:"[]"通配符用于钦定一多种的字符,只要知足这一个字符当中之一且出现在"[]"通配符的地点的字符串就满意查询条件
(1)、各个通配符能够构成使用,必需自习分析它所代表的合作原则
       
                                  相称原则列表
   查询条件                                                      相配原则
   LIKE '5[%]'                                                     5%
   LIKE '[_]n'                                                     _n
   LIKE '[a-f]'                        a,b,c,d,e,f
   LIKE '[[]'                                                       [
   LIKE '[]]'                                                       ]
   LIKE 'abc[def]'                                             abcd,abce,abcf
   LIKE 'abc[_]d%'                                             adbc_d...(省略号表示能够有私行字符)
   LIKE 'a[^a]d%'                                              不能为aad...([^]代表不能取[]内的字符)
   
示例:
查询名称(name)中蕴藏"_"的享有数据:SELECT * FROM table_name WHERE name LIKE '%[_]%'
询问名称(name)中最后两个字符为"a","b","f","g"的有着数据:SELECT * FROM table_name WHERE name LIKE '%[a,b,f,g]'
询问名称(name)中最后二个字符不为"a","b","f","g"的具备数据:SELECT * FROM table_name WHERE name LIKE '%[^a,b,f,g]'

过滤数据

使用 SELECT 语句的 WHERE子句钦赐找出条件,只检索所需的多寡需求钦定搜索条件,寻觅条件也叫做过滤条件,在SELECT语句中,数据依照WHERE 子句中钦定的追寻条件实行过滤。WHERE 子句在表名 (FROM子句) 之后给出。

  1. SELECT prod_name,prod_price FROM products WHERE prod_price=2.5;
    假若相同的时间接选举拔 ODPRADODE本田UR-V BY 子句和 WHERE 子句时,应该让 OLX570DERubicon BY 位于 WHERE 从此。

  2. WHERE 子句操作符

    • = 等于
    • <> 不等于
    • != 不等于
    • < 小于
    • <= 小于等于
    • > 大于
    • >= 大于等于
    • BETWEEN 在内定的八个值时期
  3. 不匹检查. SELECT prod_name, prod_price FROM product WHERE prod_location <> 'japan', 注意,单引号用来界定字符串,就算将值与串类型的列来张开相比,则供给限制引号,用来与数值列进行相比较的值不用引号。

  4. 范围值检查: SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10 ,BETWEEN 是关闭查询,也正是意味包括了序曲和终结

  5. 空值检查: 在开立表,表设计职员能够钦赐在那之中的列是或不是足以不分包值,在多个列不包涵值时,称其为含有空值 NULL, SELECT 语句有二个非同常常的 WHERE 子句,可用来检查有着 NULL值的列,这些 WHERE 子句正是 IS NULL 子句

 

重命名表 (RENAME TABLE)

谬误意况:
SELECT EmployeeID,price FROM table_name GROUP BY EmployeeID
张冠李戴提醒:选用列表中的列 'table_name.price' 无效,因为该列未有蕴含在聚合函数或 GROUP BY 子句中。
化解办法:
1、将price写在GROUP BY。(原因:未有被GROUP BY包涵,Group By语句的后边,作为分组的依照)
2、将price写在聚合函数中 (举例:min(price))

中间统一

方今截至所用的联结称为等值联结,他依附四个表之间的杰出测量检验,这种统一也叫做里头统一,其实,对于这种联合能够应用稍微分歧的语法来鲜明钦定联结的体系,

                                      字符串函数
  函数名                       示例                                          函数功用
  CharIndex                  CharIndex('ab','cdab')结果回到3                 重回‘ab’在‘cdab’中的地点,将回来第二个假名的地点
  Len                        Len('adc')结果回到3                             重返字符串的尺寸
   Upper                      Upper('abc')结果ABC                             将字符串中的小写字母调换为题写
  Ltrim                      Ltrim('  adc')结果再次回到adc                       清楚侧面空格
  安德拉trim                      福睿斯trim('abc  ')结果回到abc                       清除左边空格
  Replace                    Replace('abb','b','z')结果回到azz               替换钦定的字符
  Stuff                      Stuff('abcd',1,2,'mm')结果再次回到mmcd              替换钦点范围的字符
  substring                  substring('abc','2','2')结果回到bc              从钦点地点截取
  
实例:测量检验字符串长度SELECT Len(字段名) FROM table_name
将放置函数作为标准使用:SELECT * FROM table_name WHERE  Len(字段名)>VALUE

文本管理函数

  • RTrim()函数来去除列值左侧的空格。
  • Upper()函数,将文件转变为大写。
  • Left() 函数,再次来到串侧面的字符。

SQL Server内置函数(内置函数可看作where条件,聚合函数无法做为where条件)

用通配符举办过滤

运用 LIKE 操作符来拓宽通配搜索,以便对数码进行复杂过滤

  1. LIKE 操作符:利用通配符可创设比较一定数据的检索格局,来匹配值的一片段的特殊字符,查找情势: 由字面值,通配符或双方结合构成的查究条件。为在搜索子句中应用通配符,必得选取LIKE 操作符,LIKE 提醒MySQL,后跟的寻觅方式选择通配符相称实际不是直接相等相称进行比较。

    • 百分号(%)通配符:表示别的字符出现的私行次数 SELECT prod_id,prod_name FROM products WHERE prod_name LIKE ‘jet%’
    • 下划线_通配符:另几个立竿见影的通配符是下划线 _,下划线只相配单个字符串并不是多少个字符串。SELECT prod_id FROM products WHERE prod_name LIKE '_ton anvil';
    • 选取通配符的技巧:
      • 决但是渡使用通配符
      • 在真正要求的时候再采纳通配符

1、SELECT 后五个聚合函数意况
亲自过问:从订单表Orders中查询种种职员和工人最早的订单时间(OrderDate)。职员和工人ID为(EmployeeID)
SELECT EmployeeID,min(OrderDate) FROM table_name GROUP BY EmployeeID
原理:当推行时首先在表中查询职员和工人ID(EmployeeID),然后将同一的ID合併为多少个。当有着的ID都唯不经常,那时便初始通过聚合函数到手
职员和工人的最初订单时间。

BETWEEN运算符
在WHERE子句中,能够应用BETWEEN运算符在三个值时期张开比较筛选。
1、用于数字类型数据相比较
查询年龄(age)在6~10以前的数码:SELECT * FROM table_name WHERE age BETWEEN 6 AND 10
2、用于时间日期相比
查询日期(bridate)在"一九五四-01-01"到"一九五二-01-01"之间的数目:SELECT * FROM table_name WHERE bridate BETWEEN '1952-01-01' AND '1954-01-01'
在意:BETWEEN运算符筛选包蕴头和尾。例如数字类型相比较,数据会富含6和10

 

动用小名
1、语法:SELECT 字段名1 别名,字段名2 别名 FROM 表名
2、语法:SELECT 别名=字段名1,别名=字段名2 FROM
3、语法:SELECT 字段名1 AS 别名,字段名2 AS 别名 FROM 表名
细心:使用“=”更动查询结果列名时相比较奇特,在SELECT语句中语法必须是“小名=字段名”;

 

专心:“%”匹配一个或八个字符。

 

支出进度中对此日期的操作:比如拿到前天、前几日的数据。
SQL语句如下: select * from table_name where pudoctime>=SUBSTRING( Convert(varchar(20),DateAdd(DD,-1,GETDATE()),120),1,10)

判定选课时间是或不是是星期一的函数为DateName(DW,COLUMN),说明式能够写成“DateName(DW,COLUMN)=‘周四’”,SQL语句如下:
SELECT * FROM table_name DateName(DW,COLUMN)=‘星期三’

                                  系统函数
  函数名                      示例                                                 函数作用
        Convert                 Convert(varchar(10),123)结果回到“123”                   装换数据类型
  DataLength              DataLength('12中夏族民共和国')结果回到6                           重返任何数据类型的字节数。“中中原人民共和国”包蕴4个字节,“12”包罗两个字节,所以回来6.  

张冠李戴原因:依据分组字段,将有所同样分组字段的笔录归并成了一条记下。
那一年剩下的那叁个不设有于Group By语句前边作为分组依赖的字段就有希望出现五个值,
不过近年来一种分组境况独有一条记下,贰个数据格是无力回天放入八个数值的,
就此那边就必要经过一定的拍卖将那一个多值的列转化成单值,然后将其放在对应的数目格中,
那么成功那一个手续的就是聚合函数。那正是怎么这么些函数叫聚合函数(aggregate functions)了。

HAVING与WHERE的区别
HAVING子句与WHERE子句的相似之处在于概念了搜寻条件,但与WHERE子句不一致,HAVING子句与组有关,并非与单个的行有关。
WHERE子句不可能一向以聚合函数作为找出条件。在SELECT语句中,WHERE和HAVING子句的试行各类不一样。
累加限制条件
1、SELECT EmployeeID,MIN(price) FROM table_name GROUP BY EmployeeID HAVING MIN(price)>20 AND EmployeeID>2

分组查询
GROUP BY子句
规律:先通过GROUP BY后边的字段举办分组,合併相同的项。留下独一的项,再推行SELECT前边的聚合函数。
SELET 前边只好有GROUP BY包蕴字段和聚合函数。

删除表中的数额
语法:DELECT FROM table_name[WHERE <表达式>]
注意:
1、使用DELETE语句删除数据时,是以整条记录为单位的,不能够只删除有些字段
剔除整张表数据
语法:TRUNCATE TABLE table_name
                                  
           二种删除语句的利害
   语句                     优点                                        缺点
   DELETE                   采取性地删除,数据可还原                    当删除整张表的多少时效用低
   TRUNCATE                 只可以删除整张表的数目,不过效用当先          无法选用性地删除,数据可过来
                            DELETE语句

(2)中间匹配
以“c”开端,以“b”结尾的保有数据:SELECT * FROM table_name WHERE COLUMN LIKE 'c%b'

编辑:MySQL数据库 本文来源:常用的放置函数,必知必会学习入门

关键词: