来自 首页 2019-09-25 06:27 的文章
当前位置: 澳门太阳娱乐手机登录 > 首页 > 正文

常用的内置函数

一、基本概念

                          实体完整性约束
  约束种类                                      功能描述
  PENVISIONIMA奥迪Q3Y KEY(主键)约束                         独一识别每一条记下的注解,可以有多列共同构成
  IDENTITY(自增)约束                            列值自增,一般接纳此属性设置的列作为主键
  UNIQUE(独一)约束                              能够动用UNIQUE约束确认保证在非主键列中不设有重复值,但列值能够是NULL(空)
  
  
                     域完整性约束
  CHECK(检查)约束                                用于限制列中值得范围
  FOREIGN KEY(外键)                              一个表中的FORENIGN KEY 指向另八个表中的PSportageIMAXC90Y KEY
  DEFAULT(暗许值)约束                            用于向列中插入暗中认可值
  NOT NULL(非空)约束                             用于强制列不收受NULL(空)值
  
  
  
注意:
1、PRubiconIMARubiconY 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、即便从未出示地增多IDENTI奥迪Q5Y约束字段,可是数据库会自行根据IDENTITY准绳加多数据

  1.数据库:

  数据库(DataBase)正是一个仓库储存数据的货仓,为了有助于数据的蕴藏和治本,它将数据依照一定的准则存款和储蓄在磁盘上。通过数据库管理类别,能够有效的集体和管制存款和储蓄在数据库中的数据。数据库是数额管理软件。数据存款和储蓄分为八个级次:人工管理阶段、文件系统阶段和数据库系统阶段。

贰次增加多行数据
语法:
INSERT [INTO] tabale_name([COLUMN1,COLUMN2,.....])
SELECT VALUE UNION
SELECT VALUE

  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范式。

除去表中的数额
语法:DELECT FROM table_name[WHERE <表达式>]
注意:
1、使用DELETE语句删除数据时,是以整条记录为单位的,无法只删除有些字段
除去整张表数据
语法:TRUNCATE TABLE table_name
                                  
           三种删除语句的利害
   语句                     优点                                        缺点
   DELETE                   选取性地删除,数据可过来                    当删除整张表的数码时功用低
   TRUNCATE                 只好删除整张表的数据,可是功能超过          无法选用性地删除,数据可过来
                            DELETE语句

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

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

  数据库管理连串(DataBase Management System, DBMS)是用来定义、处理和保证数据的软件。它是数据库系统的首要组成都部队分。数据库管理系列通过SQL语言来保管数据库中的数据。

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

  4.SQL语言:

  SQL(Structured Query Language)语言的齐全都以结构化查询语言。它总结:

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

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

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

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

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

查询语句语法结构
语法:SELECT <COLUMN1,COLUMN2,.....> FROM <table_name> [表达式] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]
O索罗德DE福特Explorer BY 子句用于对查询结果进行排序。ASC表示升序,DESC代表降序排列,默许的排序是ASC.
小心:将查询获得的结果叫做结果集(RecordSet).SQL Server对大小写不灵敏,满含主要字在内。举例,SELECT、select和Select是一模二样的。

  常见数据库

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

动用别称
1、语法:SELECT 字段名1 别名,字段名2 别名 FROM 表名
2、语法:SELECT 别名=字段名1,别名=字段名2 FROM
3、语法:SELECT 字段名1 AS 别名,字段名2 AS 别名 FROM 表名
留心:使用“=”改动查询结果列名时比较杰出,在SELECT语句中语法必需是“小名=字段名”;

  版本分类

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

  阿尔法暗暗表示那是三个以突显新个性为目标的本子,存在比较多的不平稳因素,还有大概会向代码中增多新新特征

  beta 未来的beta版、公布版或产品发表中,全体API、外界可视结会谈SQL命令列均不再改变,不再向代码中增多影响代码稳固性的新特征。Gamma比Beta版越来越尖端。

  GA若无后缀,则暗中表示那是一个好些个场合下可用版本只怕是成品版本。. GA releases则是稳固版。

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

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

  Linux安装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数据类型(摘自新手教程:

  MySQL扶助各种类型,大约能够分为三类:数值、日期/时间和字符串(字符)类型。

标准查询注意:
1、在一个WHERE子句中,能够何况采纳多少个AND运算符链接八个查询条件。
2、在“(表明式1)OEvoque(表明式2)”中,倘使表达式1为TRUE,将不再实行表明式2。

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

 

  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 混合日期和时间值,时间戳

SQL Server内置函数(内置函数可视作where条件,聚合函数不可能做为where条件)

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

                                      字符串函数
  函数名                       示例                                          函数功用
  CharIndex                  CharIndex('ab','cdab')结果回到3                 重回‘ab’在‘cdab’中的地点,将再次回到第三个假名的地方
  Len                        Len('adc')结果回到3                             重返字符串的长度
   Upper                      Upper('abc')结果ABC                             将字符串中的小写字母转变为题写
  Ltrim                      Ltrim('  adc')结果回到adc                       清楚左侧空格
  兰德酷路泽trim                      中华Vtrim('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

三、MySQL表操作

                                    日期函数
        函数名                  示例                                                  函数功效
        GetDate                 GetDate结果再次回到“当前天子”                             重回当明天期
        DateAdd                 DateAdd(mm,2,'二零零六-10-08')结果回到‘2010-12-08’        向日期内定部分增添数字,在这之中,yy表示年、mm表示月、dd表示日
  DateDiff                DateDiff(dd,'二零零六-09-09','二〇〇八-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()

  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。

  - 能够统一七个表执行插入数据操作。

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

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

  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实行测量检验,以确认保障它过滤的是当真要去除的笔录。

                                    数学函数
  函数名                  示例                                                   函数成效
   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”                                     开平方

   3.创办表及约束原则

                                  系统函数
  函数名                      示例                                                 函数效用
        Convert                 Convert(varchar(10),123)结果重回“123”                   装换数据类型
  DataLength              DataLength('1第22中学夏族民共和国')结果回到6                           再次来到任何数据类型的字节数。“中华夏族民共和国”包罗4个字节,“12”包蕴多个字节,所以回来6.  

  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语句如下: select * from table_name where pudoctime>=SUBSTRING( Convert(varchar(20),DateAdd(DD,-1,GETDATE()),120),1,10)

  2.羁绊原则

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

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

 

 
模糊查询
在SQL Server中,通过利用通配符来达成LIKE运算,通配符“%”,“_”,“[]”。
瞩目:唯有char、varchar和text类型的数目能力应用LIKE运算符和通配符。

  4.修改表结构

1、“%”通配符:表示任性字符的同盟,且不计字符的多少。
(1)伊始、结尾相配
先导匹配(以字母“c”初叶的具备数据):SELECT * FROM table_name WHERE COLUMN LIKE 'c%'
末尾相称(以字母“c”结尾的享有数据):SELECT * FROM table_name WHERE COLUMN LIKE '%c'

  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;

(2)中间相配
以“c”起头,以“b”结尾的装有数据:SELECT * FROM table_name WHERE COLUMN LIKE 'c%b'

  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;

 

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

四、MySQL查询操作

瞩目:“%”相称二个或七个字符。

  1、查询数据

2、”_“通配符:”_“统配符的成效与”%“基本一样,只是它仅代表任性二个字符(不一样)的合营。若需求代表三个字符的非常,则动用多个”_“通配符,即写成”_ _“。
(1)相称二个字符
亲自去做:从表中查询名称(name)为”t_fu“("_"代表私自八个字符)的保有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE 't_fu'     相称字符串有(tafu,tbfu,tcfu.....)

  1.查询关键字 SELECT FROM

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

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

  2.排序关键字 O奥迪Q3DELX570 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;

(3)"_"与"%"的归纳应用
在模糊查询进度中,平时索要"_"和"%"一同使用手艺一挥而就查询效用。
示范:查询名称(name)第2个字母为"c"的兼具数据,SQL语句如下:
SELECT * FROM table_name where name LIKE '_c%'

  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、"[]"通配符:"[]"通配符用于钦点一雨后冬笋的字符,只要知足那几个字符个中之一且现身在"[]"通配符的岗位的字符串就满足查询条件
(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]'

   2、数据管理函数

IN运算符
若只必要满意多少个规格中的三个询问条件,则能够利用IN运算符。IN运算符允许根据一行记录中是还是不是有一列饱含在一体系值之中而挑选改行。
全部的基准罗列在IN运算符之后,并以园括号括起来,各样条件之间接选举取逗号分开。
示例:
查询ID为1、3或4的数据:SELECT * FROM table_name WHERE ID IN (1,3,4)
注意:
在大多动静下,OENCORE运算符与IN运算符能够兑现均等的意义。
示例:SELECT * FROM talbe_name WHERE ID=1 OR ID=3 OR ID=4

  1.文本管理函数

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

   - 用例: 

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

两侧的结果完全一致,都以回去多条数据记录。可是,与OPAJERO运算符比较,IN运算符具备以下多少个优点:
(1)当选择标准非常多时,选拔IN运算符将十一分露骨,只必要在括号中用逗号间隔后三遍位列就能够,运转作用高于O奥迪Q5运算符。
(2)IN运算符后边所列的规范能够是另一条SELECT语句,即子查询。

  2.日期和岁月管理函数

  注:日期和岁月函数依照

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

   用例:

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

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

BETWEEN运算符
在WHERE子句中,能够使用BETWEEN运算符在多少个值时期张开相比筛选。
1、用于数字类型数据比较
查询年龄(age)在6~10事先的多少:SELECT * FROM table_name WHERE age BETWEEN 6 AND 10
2、用于时间日期比较
询问日期(bridate)在"1955-01-01"到"1951-01-01"之间的数额:SELECT * FROM table_name WHERE bridate BETWEEN '1952-01-01' AND '1954-01-01'
细心:BETWEEN运算符筛选满含头和尾。举个例子数字类型相比,数据会含有6和10

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

 

  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条件)
   函数名称                                                        函数功用
   SUM                                                             再次回到选拔结果集全部值的和
   MAX                                                             再次回到选拔结果聚焦全体值的最大值
   MIN                                                             重临选拔结果集中全数值的最小值
   AVG                                                             重临选拔结果凑集全体值的平均值
      COUNT                                                           重返选取结果集中央银行的数目

  3、分组关键字 GROUP BY 和HAVING

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

  1.GROUP BY

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

  - GROUP BY会在结尾明确的分组上进展聚焦。

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

  - 除聚合函数外,SELECT语句中的种种列都必得在GROUP BY子句中付出。

  - 假如分组列中具备NULL值,则NULL将作为多个分组重返;要是列中有多行NULL值,它们将分为一组。

  - GROUP BY子句必须出现在WHERE子句字后,ORubiconDE福特Explorer BY子句在此以前。

  一般在行使GROUP BY子句时,应该也给出OLX570DER BY子句,以有限协理数据正确排序。

 

  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;

分组查询
GROUP BY子句
原理:先通过GROUP BY前面包车型地铁字段进行分组,合併一样的项。留下独一的项,再实行SELECT后边的聚合函数。
SELET 前边只好有GROUP BY包括字段和聚合函数。

  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.'
);

数据表

 

1、SELECT 后贰个聚合函数状态
示范:从订单表Orders中询问种种职员和工人最初的订单时间(OrderDate)。职员和工人ID为(EmployeeID)
SELECT EmployeeID,min(OrderDate) FROM table_name GROUP BY EmployeeID
规律:当实施时首先在表中查询职员和工人ID(EmployeeID),然后将长久以来的ID合并为多少个。当全数的ID都唯一时,那时便开头通过聚合函数到手
职工的最先订单时间。

2、SELECT 后三个聚合函数意况
演示:从订单表Orders中查询种种职员和工人最初的订单时间(OrderDate)和选购最低价的价位(price)。职员和工人ID为(EmployeeID)
SELECT EmployeeID,min(OrderDate),min(price) FROM table_name GROUP BY EmployeeID
原理:当施行时首先在表中查询职员和工人ID(EmployeeID),然后将同一的ID合併为三个。当全数的ID都唯不时,那时便早先通过聚合函数到手
职工的最初订单时间,接着再经过聚合函数到手最便利的价位。

3、GROUP BY后五个字段意况
实例:SELECT MAX(C) FROM table_name GROUP BY A,B
原理:当推行时先对A进行分组假若A中有一样项,则始于对B进行分组。假使A、B同一时候出现同样项。则将同样项联合,留下八个独一项。
若A出现同样项,B为区别项。则此时不进行统一,保留此时的项。当A、B分组截至后,则始于通过聚合函数寻觅分组好后C的最大项。

谬误情状:
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))

荒唐原因:依据分组字段,将富有一样分组字段的笔录归并成了一条记下。
其有的时候候剩下的那三个不设有于Group By语句后边作为分组依赖的字段就有希望出现多个值,
但是前段时间一种分组境况唯有一条记下,多个数据格是无可奈何归入八个数值的,
据此这里就须求经过一定的管理将这一个多值的列转化成单值,然后将其位于对应的数目格中,
那么成功这一个手续的正是聚合函数。那便是干吗这么些函数叫聚合函数(aggregate functions)了。

计算: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值分别在同
一组,即以为他俩是“相等”的

HAVING子句
GROUP BY子句只是轻便地依照所选列的数目开展分组,将该列具有一样值的行划为一组。而实际利用中,
一再还亟需删除不满意条件的组,SQL提供HAVING子句来促成该作用。
示例:SELECT EmployeeID,MIN(price) FROM table_name GROUP BY EmployeeID HAVING MIN(price)

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

谬误写法: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

表的主干链接
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语句的其余子句中都能够使用表的别称。

表的连天类型
1、内链接:内延续也称等同连接,重返的结果集是多个表中保有相相配的数目,并丢弃不相配的数码(类似于地点的表的主导连接)。
语法:SELECT * FROM table_name1 [INNER] JOIN table_name2 ON <表达式> [WHERE] [<表达式>]
示例:SELECT * FROM Categories INNER JOIN  Prouducts ON Categories.CategorID=Prouducts.CategorID
只顾:INNE景逸SUV关键字能够省略。

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

 

  

 

 

 

 

 

 

 

 

 

 

 

 

本文由澳门太阳娱乐手机登录发布于首页,转载请注明出处:常用的内置函数

关键词: