MySQL学习笔记(二)

3、约束

MySQL中约束保存在information_schema数据库的table_constraints中,能够经过该表查询约束信息;数据库

约束主要完成对数据的检验,保证数据库数据的完整性;若是有相互依赖数据,保证该数据不被删除。函数

经常使用五类约束:spa

not null:非空约束,指定某列不为空orm

unique: 惟一约束,指定某列和几列组合的数据不能重复io

primary key:主键约束,指定某列的数据不能重复、惟一table

foreign key:外键,指定该列记录属于主表中的一条记录,参照另外一条数据function

//check:检查,指定一个表达式,用于检验指定数据form

MySQL不支持check约束,但能够使用check约束,而没有任何效果;语法

4、大聚合函数

Orders表im

O_Id

OrderDate

OrderPrice

Customer

1

2008/12/29

1000

Bush

2

2008/11/23

1600

Carter

3

2008/10/05

700

Bush

4

2008/09/28

300

Bush

5

2008/08/06

2000

Adams

6

2008/07/21

100

Carter

 1.count 函数(返回匹配指定条件的行数)

 count(*) 对表中行的数目进行统计,无论列中是否包含null值 仍是非空值

SELECT COUNT(*) AS NumberOfOrders FROM Orders

结果集相似这样:

NumberOfOrders

6

 count(column)  对特定列中具备值的行进行计数,忽略null的值。

SELECT COUNT(Customer) AS CustomerNilsen FROM Orders

WHERE Customer='Carter'

以上 SQL 语句的结果是 2,由于客户 Carter 共有 2 个订单:

CustomerNilsen

2

如今,咱们但愿计算 "Orders" 表中不一样客户的数目。

咱们使用以下 SQL 语句:

SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders

结果集相似这样:

NumberOfCustomers

3

这是 "Orders" 表中不一样客户(Bush, Carter 和 Adams)的数目。

avg ( 函数返回数值列的平均值。NULL 值不包括在计算中)

语法

SELECT AVG(column_name) FROM table_name

例子 1

如今,咱们但愿计算 "OrderPrice" 字段的平均值。

咱们使用以下 SQL 语句:

SELECT AVG(OrderPrice) AS OrderAverage FROM Orders

结果集相似这样:

OrderAverage

950

例子 2

如今,咱们但愿找到 OrderPrice 值高于 OrderPrice 平均值的客户。

咱们使用以下 SQL 语句:

SELECT Customer FROM Orders

WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

结果集相似这样:

Customer

Bush

Carter

Adams

 

2.max(函数返回一列中的最大值。NULL 值不包括在计算中)

SQL MAX() 语法

SELECT MAX(column_name) FROM table_name

注释:MIN 和 MAX 也可用于文本列,以得到按字母顺序排列的最高或最低值。

如今,咱们但愿查找 "OrderPrice" 列的最大值。

咱们使用以下 SQL 语句:

SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders

结果集相似这样:

LargestOrderPrice

2000

 

min 最小值

MIN(函数返回一列中的最小值。NULL 值不包括在计算中)

SQL MIN() 语法

SELECT MIN(column_name) FROM table_name

注释:MIN 和 MAX 也可用于文本列,以得到按字母顺序排列的最高或最低值。

如今,咱们但愿查找 "OrderPrice" 列的最小值。

咱们使用以下 SQL 语句:

SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders

结果集相似这样:

SmallestOrderPrice

100

 

上面是5个统计函数,单独使用,意义不大,要和分组配合起来使用

分组:group by  ,having

GROUP BY 语句

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

SQL GROUP BY 实例

咱们拥有下面这个 "Orders" 表:

O_Id

OrderDate

OrderPrice

Customer

   如今,咱们但愿查找每一个客户的总金额(总订单)。

咱们想要使用 GROUP BY 语句对客户进行组合。

咱们使用下列 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders

GROUP BY Customer

Customer

SUM(OrderPrice)

Bush

2000

Carter

1700

Adams

2000

结果集相似这样:

很棒吧,对不对?

让咱们看一下若是省略 GROUP BY 会出现什么状况:

SELECT Customer,SUM(OrderPrice) FROM Orders

结果集相似这样:

Customer

SUM(OrderPrice)

Bush

5700

Carter

5700

Bush

5700

Bush

5700

Adams

5700

Carter

5700

上面的结果集不是咱们须要的。

那么为何不能使用上面这条 SELECT 语句呢?解释以下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每一个值对应 "Orders" 表中的每一行)。所以,咱们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。

GROUP BY 一个以上的列

咱们也能够对一个以上的列应用 GROUP BY 语句,就像这样:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders

GROUP BY Customer,OrderDate

HAVING 子句

在 SQL 中增长 HAVING 子句缘由是,WHERE 关键字没法与合计函数一块儿使用。

SQL HAVING 语法

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

HAVING aggregate_function(column_name) operator value

SQL HAVING 实例

如今,咱们但愿查找订单总金额少于 2000 的客户。

咱们使用以下 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders

GROUP BY Customer

HAVING SUM(OrderPrice)<2000

结果集相似:

Customer

SUM(OrderPrice)

Carter

1700

如今咱们但愿查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。

咱们在 SQL 语句中增长了一个普通的 WHERE 子句:

SELECT Customer,SUM(OrderPrice) FROM Orders

WHERE Customer='Bush' OR Customer='Adams'

GROUP BY Customer

HAVING SUM(OrderPrice)>1500

结果集:

Customer

SUM(OrderPrice)

Bush

2000

Adams

2000

相关文章
相关标签/搜索