您的位置:永利集团登录网址 > 计算机入门 > MySQL永利集团登录网址 必知必会学习入门

MySQL永利集团登录网址 必知必会学习入门

2019-10-01 21:10

一、基本概念

                          实体完整性约束
  约束连串                                      成效描述
  P宝马X5IMA奥德赛Y KEY(主键)约束                         独一识别每一条记下的标记,能够有多列共同整合
  IDENTITY(自增)约束                            列值自增,平日接纳此属性设置的列作为主键
  UNIQUE(独一)约束                              能够动用UNIQUE约束确定保证在非主键列中不设有重复值,但列值能够是NULL(空)
  
  
                     域完整性约束
  CHECK(检查)约束                                用于限制列中值得范围
  FOREIGN KEY(外键)                              二个表中的FORENIGN KEY 指向另贰个表中的POdysseyIMATucsonY KEY
  DEFAULT(暗许值)约束                            用于向列中插入暗中认可值
  NOT NULL(非空)约束                             用于强制列不收受NULL(空)值
  
  
  
注意:
1、PENCOREIMA凯雷德Y 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、固然尚未出示地加多IDENTIGL450Y约束字段,然而数据库会自动根据IDENTITY法规增加数据

数据库入门

数据库: 保存有组织的数码的容器(常常是三个文本或一组文件).数据库软件应该称为 DBMS(DataBase Manage System) 数据库管理体系,数据库是指通过 DBMS 创立和调整的器皿,数据库能够是保留在硬盘上的公文,但也足以不是。你无法直接待上访谈数据库,而是利用 DBMS 来访问,他替你拜望数据库。

表: 某种特定类型数据的结构化清单。存款和储蓄在表中的数量是一连串型的数目或多少个清单,数据库中的每个表都有一个名字,用来标记本身,此名字是唯一的,那代表数据库中绝非其它表具备一致的名字。

表具备局地表征,那几个特定定义了多少在表中怎么着存款和储蓄,如存储什么样的多寡,数据怎么着讲授,个部分音信怎么着命名等等,描述那组消息正是所谓的格局
方式: 关于数据库和表的布局及特点的信息.

列:表中的多少个字段,全数的表都以由二个或多少个列组成的。
数据类型: 所可能的多寡的种类,每种表都有相对应的数据类型,他限制(容许)该列中蕴藏的数量。数据类型限制可存款和储蓄在列中的数据体系,数据类型还补助科学的排序数据,并在优化磁盘使用方面起第一的魔法,由此,在创制表时必须对数据类型给予极度的钟情

行:表中的一个记录,
主键:一列(或一组列),其值能够独一区分表中的每种行。独一标记表中每行的这几个列称为主键,主键用来代表二个一定的行,未有主键,更新或删除表中一定行很劳顿,因为未有平安的主意保险只提到相关的行。表中的别的列都得以看作主键,只要它满意以下准绳:

  • 其他两行都不具备一样的主键值
  • 各样行都必得具有多个主键值(主键值不容许 NULL 值)。

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

  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语句

领会数据库和表(SHOW)

  1. SHOW DATABASES: 再次来到一个数据库列表,满含在那些列表中的大概是 MYSQL 内部使用的数码库.
  2. SHOW TABLES: 重临当前选取的数据库内可用表的列表
  3. SHOW COLUMS FROM customers: 必要付诸四个表名,对各种字段重回一行。包蕴 该字段的新闻。

  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中分离出来,而删除数据库是将数据库文件删除。

创建表

MySQL 不止用于表数据操作,况兼仍是能够用来执行数据库和表的有着操作,蕴涵表本身的开创和拍卖。

创制表的主意:

  • 利用全数交互式创设和管理表的工具
  • 行使 MySQL 语句操纵
  1. 表成立基础(CREATE TABLE)
    • 新的注解名再入眼字 CREATE TABLE 之后给出
    • 表列的名字和概念,用逗号分隔
  2. 使用 NULL 值: Null 值正是未有值只怕缺值,允许 NULL 值的列也同意再插入行时不交付该列的值,差别意 NULL 值的列不接受该列未有值的行,换句话说,在插入或更新行时该列必须有值。NULL 为私下认可值,若是不点名 NOT NULL, 则感到钦点的是 NULL, NULL 值正是从未值,他不是赤手,空串是三个灵光的值。
  3. 主键: 主键的值必需独一,即,表中的各种行必得具有独一的主键值,假设主键使用单个列,则他的值必需独一,假设利用多少个列,则那一个列的组合值必需独一。
  4. 使用 AUTO_INCREMENT: 告诉 MySQL ,本列每当增添一行时自动增量,每一趟施行二个 INSERT 操作时, MySQL 会对该列增量,各类表只允许叁个 AUTO_INCREMENT列,并且他必得被索引

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

查询语句语法结构
语法:SELECT <COLUMN1,COLUMN2,.....> FROM <table_name> [表达式] [ORDER BY <COLUMN1,COLUMN2,.....> [ASC或DESC]]
OLX570DEOdyssey BY 子句用于对查询结果实行排序。ASC表示升序,DESC表示降序排列,暗中同意的排序是ASC.
静心:将查询获得的结果叫做结果集(RecordSet).SQL Server对大小写不灵敏,包含重要字在内。举例,SELECT、select和Select是一模二样的。

更改表(ALTER TABLE)

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

  常见数据库

  商业数据库:陶文的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语句中语法必得是“小名=字段名”;

删除表 (DROP TABLE)

  版本分类

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

  alpha暗暗提示那是贰个以显示新特点为目标的本子,存在非常多的不安宁因素,还会向代码中增添新新特色

  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....

重命名表 (RENAME TABLE)

  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]]

插入数据

使用 INSERT 语句将数据插入表中, INSERT是用来插入(或丰盛)行到多少库表的,插入能够用聚集情势利用

  1. 插入完整行,使用 INSERT ,要求指定证明和被插入到新行的值,最佳是写上列名,那样可以保障列明是精确的。
  2. 安顿八个行: INSERT 能够插入一行到一个表中,假使想一回性插入多行的话,就必要运用多个INSERT 或然使用单条 INSERT 语句有多组值,每组值用一对圆括号括起来

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

 

履新数据

为了立异(修改)表中的数额,可使用 UPDATE 语句,可使用两种方法使用 UPDATE:
利用 UPDATE 的时候应当要潜心,决不简单 WHERE 子句,使用 UPDATE 语句总是以要更新的表的名字初叶.要以 WHERE 子句(用来报告 MySQL 更新哪一行)甘休。在更新多个列时,只必要采纳单个 SET 命令,每个 列=值对里面用逗号分隔(最终一列之后并非逗号);

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

  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条件)

除去数据

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

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

  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                       清楚左侧空格
  Havaltrim                      本田CR-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

革新和删除的指点标准

一经实践 UPDATE 而不带 WHERE 子句,则表中每行都将应用新值更新,类似的,要是施行 DELETE 语句而不带 WHERE 子句,表的有所数据都将被删除。

  • 只有缺点和失误筹算更新和删除每一行,不然相对不用使用不带 WHERE子句的 UPDATEDELETE语句
  • 有限支撑各样表都有主键,尽或许像 WHERE子句那样选拔它
  • 在对 UPDATE 或 DELETE 语句使用 WHERE 子句前,最棒先用 SELECT 举办测量检验,保障它过滤的是理当如此的记录,避防备编写的 WHERE 子句不科学
  • 动用强制进行引用完整性的数据库,那样 MySQL 将不容许删除全数与另外表相关联的数量的行。

三、MySQL表操作

                                    日期函数
        函数名                  示例                                                  函数功能
        GetDate                 GetDate结果回到“当前几日子”                             重临当前几天期
        DateAdd                 DateAdd(mm,2,'2009-10-08')结果重临‘二〇〇九-12-08’        向日期钦定部分增多数字,当中,yy表示年、mm表示月、dd表示日
  DateDiff                DateDiff(dd,'2010-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()

查找数据(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.插入数据 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)=‘星期三’

排序检索数据

将会讲课怎样利用 SELECT 语句的 OHighlanderDE卡宴_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奥迪Q3DE奥德赛 BY 子句以降序(Z-A)顺序排序,为了实行降序排序,必得钦命 DESC 关键字. SELECT prod_id, prod_price,prod_name FROM products ORDER BY prod_price DESC. DESC 关键字只好动用到一向放在其前方的列名。假使想要对三个列上进行降序排列,必需对种种列钦命DESC关键字。

  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”                                     开平方

过滤数据

使用 SELECT 语句的 WHERE子句钦点寻找条件,只检索所需的数码需求钦点搜索条件,搜索条件也称为过滤条件,在SELECT语句中,数据依赖WHERE 子句中钦命的检索条件举行过滤。WHERE 子句在表名 (FROM子句) 之后给出。

  1. SELECT prod_name,prod_price FROM products WHERE prod_price=2.5;
    假使还要选用 ODCRUISERDE途胜 BY 子句和 WHERE 子句时,应该让 O普拉多DEWrangler 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 子句

   3.创造表及约束原则

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

数码过滤

团组织 WHERE 子句创立职能更加强的更尖端的搜寻条件,MYSQL 允许两个 WHERE 子句,这个子句能够以二种方式使用: 以 AND 子句的不二秘籍也许以 ORubicon子句的形式利用。操作符用来链接恐怕转移 WHERE 子句中的子句的显要字,也称为逻辑操作符

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

  2. OR操作符: O中华V 操作符与 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 操作符日常比 OLacrosse 操作符清单施行越来越快
    • IN 的最大亮点是足以包蕴其余 SELECT 语句,使得能够改造态地树立 WHERE 子句
  5. NOT操作符:NOT 操作符用来否认它以后所跟的其他条件 SELECT prod_name FROM products WHERE vend_id NOT IN(1002,1003)

  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)

用通配符举行过滤

使用 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';
    • 运用通配符的手艺:
      • 毫无过渡使用通配符
      • 在真的需求的时候再利用通配符

  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'

创建总结字段

filed 能够与列的意趣同样,常常交换使用,然则数据库的列称为通常列,而术语日常用在测算字段的连年上.

  1. 拼接字段: concatenate:将值连接到一齐构成单个值,消除办法是把八个列拼接起来,在 MySQL 的 SELECT 语句中,可采用 Concat() 函数来拼接多少个列。Concat() 拼接串,即把三个串连接起来产生三个较长的串,必要三个或多少个钦赐的串,各样串之间用逗号分隔。
  2. 采纳外号 SELECT Concat(...) AS newName FROM products
  3. 施行算数总结: 总括字段的另贰个大面积用途是对搜索出的多寡开展算术计算,

  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'

动用数据管理函数

MySQL 协助使用函数来管理数据,函数日常是在多少上试行的,它给多少的更动和拍卖提供了便利。函数未有SQL 的可移植性强,许多的 SQL 语句是可移植的,在 SQL 完成之间有差别时,这几个出入经常不那么难处理,而函数的可移植性却不强,

  2.改造列定义和列名

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

 

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

利用函数

大部 SQL 达成帮忙以下种类的函数:

  • 用来拍卖文本串(删除或填充钱,转变值为大写或小写的文件函数)
  • 用以在数值数据上开展算术操作(如相对值,实行代数运算)的数值函数
  • 用于拍卖日期和岁月值,而且从那些址中提取一定成分
  • 重回 DBMS 正使用的非常信心(如重临顾客登入音信,检查版本细节)的系统函数

四、MySQL查询操作

留意:“%”相称多个或三个字符。

文本管理函数

  • RTrim()函数来去除列值侧面的空格。
  • Upper()函数,将文件转换为大写。
  • Left() 函数,重返串左侧包车型大巴字符。

  1、查询数据

2、”_“通配符:”_“统配符的功力与”%“基本同样,只是它仅代表任性四个字符(差距)的合作。若须求代表多少个字符的特别,则运用八个”_“通配符,即写成”_ _“。
(1)相称一个字符
以身作则:从表中查询名称(name)为”t_fu“("_"代表专擅二个字符)的保有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE 't_fu'     相配字符串有(tafu,tbfu,tcfu.....)

时期和时间处理函数

时光和日期选用相应的数据类型和奇特的格式存款和储蓄,以便能快捷和实用排序或过滤,并且节省物理存款和储蓄空间,日常,应用程序不应用用来囤积日期和岁月的格式,因而日期和时间函数被用来总计,读取和管理那几个值。

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

  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 '_ _ _'
注意:"_"只可以协作三个字符。

数值管理函数

数值处理函数仅管理数值数据,这个函数平日重要用于代数,三角或几何运算.

  • Abs(). 再次来到一个数的相对值
  • Cos()重返多个角度的余弦
  • ...

  2.排序关键字 OGL450DEPAJERO 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)第贰个假名称为"c"的具有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE '_c%'

集中数据

MySQL 查询可用以检索数据,以便分析和表格生成,那类别型的追寻例子有以下二种:

  • 分明表中央银行数(或许知足有些条件或含有有些特定值的行数)
  • 获取表中行组的和
  • 寻觅表列(或享有行或一些特定的行)的最大值,最小值和平均值
    那几个事例都亟待对表中数量集中。为了寻找上述的种类, MySQL 给出了5个聚众函数。聚拢函数运作在行组上,总括和重临单个值的函数。

  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]'

AVG() 函数

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

   2、数据管理函数

IN运算符
若只供给满足两个尺码中的一个询问条件,则能够运用IN运算符。IN运算符允许依据一行记录中是或不是有一列蕴涵在一类别值之中而挑选改行。
具有的原则罗列在IN运算符之后,并以园括号括起来,种种条件之间接选举用逗号分开。
示例:
查询ID为1、3或4的数据:SELECT * FROM table_name WHERE ID IN (1,3,4)
注意:
在超过一半意况下,O凯雷德运算符与IN运算符能够落成均等的机能。
示例:SELECT * FROM talbe_name WHERE ID=1 OR ID=3 OR ID=4

COUNT() 函数

COUNT() 函数进行计数,可应用 COUNT() 分明表中央银行的数量或相符特定条件的行的数量。COUNT()函数有三种采纳情势

  1. 使用 COUNT(*) 对表中央银行的多寡实行计数,不管表列中含有的是空值(NULL)如故非空值。
  2. 使用 COUNT(column) 对一定列中具备值的行举办计数,忽略 NULL 值。

  1.文本管理函数

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

   - 用例: 

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

双面包车型地铁结果完全一致,都以回到多条数据记录。不过,与O景逸SUV运算符比较,IN运算符具备以下三个亮点:
(1)当选拔标准相当多时,选取IN运算符将拾分露骨,只要求在括号中用逗号间隔后一遍位列就能够,运营效能高于OTiguan运算符。
(2)IN运算符前面所列的原则能够是另一条SELECT语句,即子查询。

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

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

MIN() 函数

MIN() 的效率正好与 MAX() 功效相反,他回到钦赐列的细小值,与 MAX() 一样,必得钦赐列名

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

 

SUM() 函数

SUM() 函数用来回到内定列值的和(总括),SUM()也足以用来合计计算值

  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                                                           重返选用结果聚焦央银行的数码

分组数据

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

  3、分组关键字 GROUP BY 和HAVING

选拔实例:SELECT SUM(COLUMN) FROM table_name

创造分组

分组是在 SELECT 语句的 GROUP BY 子句中创立的。

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

使用了 GROUP BY子句时,要求精通有个别最主要的分明。

  • GROUP BY 子句能够包蕴自由数指标列,那使得能对分组举行嵌套,为多少分组提供更细心的决定。

  1.GROUP BY

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

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

  - GROUP BY子句列出的各样列都必需是探究列或有效的表达式(但不能够是聚合函数)。

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

  - 假使分组列中具有NULL值,则NULL将用作三个分组重回;要是列中有多行NULL值,它们将分成一组。

  - GROUP BY子句必需现身在WHERE子句字后,OENVISIONDE汉兰达 BY子句从前。

  日常在动用GROUP BY子句时,应该也给出OENVISIONDER BY子句,以保障数据准确排序。

 

过滤分组

而外能采纳 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 组级过滤
  • OEnclaveDE昂科拉 BY 输出排序依次
  • LIMIT 限制检索的行数

  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富含字段和聚合函数。

使用子查询

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、关键字顺序

关键字(子句) 说明
 是否必须使用
 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都唯不平时,那时便最早通过聚合函数到手
职员和工人的最先订单时间。

用作计量字段使用子查询

使用子查询的另一办法是创办字段。

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

2、SELECT 后多个聚合函数气象
亲自去做:从订单表Orders中查询种种职员和工人最初的订单时间(OrderDate)和购买最有益的价位(price)。职员和工人ID为(EmployeeID)
SELECT EmployeeID,min(OrderDate),min(price) FROM table_name GROUP BY EmployeeID
原理:当推行时首先在表中查询职员和工人ID(EmployeeID),然后将同一的ID合併为多少个。当全数的ID都仅临时,那时便初始通过聚合函数到手
职工的最初订单时间,接着再经过聚合函数到手最有利的价格。

联结表

SQL 最强大功效之一便是能在数据检索查询的实施中联合(join)表,联结是采用SQL 的 SELECT 能推行的最关键的操作,很好地精晓联结及其语法是上学 SQL 的二个极为首要的组成都部队分。

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

为啥要使用联结

分解数据为多少个表中,更便利地管理,况兼存有越来越大的可伸缩性。

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

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

不当原因:依照分组字段,将有所同等分组字段的笔录归并成了一条记下。
那年剩下的那几个不设有于Group By语句前边作为分组依靠的字段就有望出现三个值,
可是当前一种分组情状独有一条记下,一个数据格是无力回天放入几个数值的,
就此这里就供给通过自然的拍卖将那些多值的列转化成单值,然后将其放在对应的数码格中,
那便是说成功这一个手续的正是聚合函数。那正是怎么这几个函数叫聚合函数(aggregate functions)了。

WHERE 子句的严重性

请记住:在一条 SELECT 语句中联合多少个表时,相应的涉嫌是在运作中结构的,在数据表的定义中子虚乌有能提醒MySQL 怎样对表进行统一的东西,你必得本人做那事情,

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

小结: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)

集合七个表

SQL 对一条 SELECT 语句中能够统一的表的数额未有范围,创立联结的着力准绳也同等,首先列出全体表,然后定义表之间的涉及。

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

构成查询

大部 SQL 查询都只含有二个或三个表中回到数据的单条 SELECT 语句,MySQL 也同意推行多少个查询(多条查询),并将结果作为单个查询结果集重回,那些构成查询交通称为并 (union) 或复合查询(compound query).
有三种为主气象,在那之中需求使用组合查询:

  • 再单个查询中从差异的表再次回到类似结构的多寡
  • 对单个表实施几个查询,按单个查询重返数据

表的基本链接
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语句的别样子句中都能够使用表的小名。

开创组合查询

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

使用 UNION : 用法,给出每条 SELECT 语句,在各条 语句之间放上关键字 UNION
UNION 规则: UNION 必需由两条或两条以上的 SELECT语句组成,语句之间用关键字 UNION 分隔,UNION 中的各样查询必需带有一样的列,表达式或聚集函数。
富含或吊销重复的行: UNION 查询时回机关删除重复的行,如果想要重回全部的相称行,可采纳 UNION ALL 而不是 UNION.
对构成查询结果排序: SELECT 语句的输出用 ORDER BY子句排序,在用 UNION重组查询时,只好利用一条 OOdysseyDERubicon BY 子句,他必得出现在最后一条 SELECT 语句之后,对于结果集,不设有用一种格局排序一部分,用另一种反式排序另一有些。

表的连天类型
1、内链接:内接连也称等同连接,再次回到的结果集是七个表中享有相相配的多少,并吐弃不包容的多寡(类似于地方的表的中坚连接)。
语法:SELECT * FROM table_name1 [INNER] JOIN table_name2 ON <表达式> [WHERE] [<表达式>]
示例:SELECT * FROM Categories INNER JOIN  Prouducts ON Categories.CategorID=Prouducts.CategorID
在意:INNELAND关键字能够总结。

全文本寻找

为了实行全文本寻找,必得索引被搜寻的列,並且趁机数据的改观不断的被再次索引,在对表列举行适当设计后,MySQL 会自动进行富有的目录和重复索引。在目录之后,SELECT 与 Match() 和 Against() 一同利用以机缘执行找出。

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

 

  

 

 

 

 

 

 

 

 

 

 

 

 

本文由永利集团登录网址发布于计算机入门,转载请注明出处:MySQL永利集团登录网址 必知必会学习入门

关键词:

  • 上一篇:没有了
  • 下一篇:没有了