MYSQL学习Task02:基础查询与排序

2.1 SELECT 语句的基本语法:

SELECT [ALL|DISTINCT] select_list
FROM table_or_view_name
[WHERE <search_condition>]
[GROUP BY <group_by_expression>]
[HAVING <search_condition>]
[ORDER BY <order_expression>[ASC|DESC]]

**

FROM子句:用来指定要查询的表名或者视图名
WHERE子句:指定限定返回行的搜索条件
GROUP BY 子句:指定查询结果的分组条件
HAVING 子句:与GROUP BY组合使用,用来对分组的结果进一步限定搜索条件
ORDER BY 子句:指定结果集的排序方式
ASC|DESC:z指定排序方式。ACS升序,为默认

在SELECT语句中FROM,WHERE,GROUP BY ORDER BY 必须按照以上次序依次执行,否则会有语法错误。

2.2.1 获取所有列
“ * ”用于把表中所有的列和列数据展示出来

SELECT *FROM table_name;

2.2.2 获取指定列
如果表中的列较少,也可以通过列出所有列名的方式获取数据

SELECT 【列名】 FROM 【表名】;

2.2.3 为列指定别名
多用于当表或列名的名称比较长时
(1)采用符合ANSI规则的方法指定别名

SELECT 【列名1"别名1", 【列名2"别名2" FROM 【表名】;

(2) 使用AS关键字指定别名(最常用)

SELECT 【列名1AS "别名1",【列名2AS "别名2" FROM 【表名】;

2.2.4 获取不重复的数据
使用DISTINCT 关键字帅选结果集,对于重复行只保留并显示一行。(每个字段数值都一样的)

SELECT DISTINCT (列名1,列名2) FROM [表名];

2.2.5 限制查询结果
如果执行SELECT语句查询的数据过多时,还可以使用LIMIT 关键字限制SELECT查询返回的记录的总数。
(1)LIMIT指定初始位置
可以指定从那条记录开始显示,并且可以指定显示多少条记录

SELECT *FROM 表名 LIMIT 初始位置, 查询记录数量;

(2)LIMIT不指定初始位置
从第一条开始显示,显示记录的条数需要使用LIMIT指定

SELECT *FROM 表名 LIMIT 显示记录数;

如果 显示记录数 小于或等于查询结果的总数量,那么将会从第一条记录开始,显示指定条数的记录。如果大于,则显示所有。
2.2.6 GROUP BY子句对查询结果分组

GROUP BY 字段名【HAVING 条件表达式】【WITH ROLLUP

字段名:按照该字段的值进行分组,指定多个字段时中间使用逗号
HAVING条件表达式:可选参数,用来限制分组后的显示,满足条件表达式的结果会被显示出来
WITH ROLLUP:可选参数,将会在所有记录的最后加上一条,该记录是上所有记录的总和。

可以单独使用,单独使用时查询结果就是字段取值的分组情况,字段取值相同的记录为一组,但是只显示改组的第一条记录。

GROUP BY 之后可以跟HAVING 子句,实现对结果集的筛选。
HAVING特点
HAVING针对结果组;WHERE针对列的数据
HAVING可以与聚合函数一起用
HAVING之过滤分组后的数据,WHERE反之
2.2.7 ORDER BY对查询结果排序

ORDER BY 【列名】 [ASC|DESC]

2.2.8WHERE查询
WHERE子句可以使用算术运算符,比较运算符,逻辑运算符等多种运算符。

2.3.1 算数运算符

 SELECT a+b, c-d, a*c, b%d(d不为0), c/d(d不为0);

除法/和求模%运算时,除数不为0,如果为0 返回NULL.
2.3.2逻辑运算符
2.3.2.1 AND或“&&”运算符
逻辑与运算。所有操作数不为0且不为空值时,返回1;存在任何一个操作数为0时,返回0;存在一个操作数为NULL且没有操作数为0时,返回NULL。
AND可以有多个操作数同时进行与运算“aANDbANDz";“a&&b&&z”.

  SELECT  ('A'='A')AND('C'<'D'),0&&NULL,3&&NULL,-1&&2&&3;

1 0 NULL 1
2.3.2.2 OR或||运算符
逻辑或运算。所有操作数中存在任何一个操作数不为非0 的数字时,返回1;操作数中不包含非0 的数字,但包含NULL,返回NULL;操作数只有0,返回0.

  SELECT  ('A'='A')OR('C'<'D'),0||NULL,3||NULL,-1||2||3;

1 NULL 1 1
2.3.2.3 NOT或!运算符
逻辑非运算符。如果操作数时非0的数字,结果返回0;如果操作时0,结果返回1;如果操作数是NULL,结果返回NULL.

 SELECT NOT 1,!NULL,!('1'='2');

0 NULL 1
2.3.2.4XOR运算符
逻辑异或运算。”aXORb".只要其中任何一个操作数为NULL,结果返回为NULL;如果ab都为非0 的数字或都为0,结果返回0;如果ab一个是非0,另一个是0,返回1.

 SELECT NULL XOR 1,NULL XOR 0,3 XOR 1,0 XOR 1;

NULL NULL 0 1
AND 运算符优先于 OR 运算符
2.3.3比较运算符
2.3.3.1 <>和!=
如果不相等,结果返回1;如果相等,结果返回0.NULL仍为NULL.
2.3.3.2 <=>
与=相同,也可用来判断NULL,相等时返回1,不相等返回0
2.3.3.3 IS NULL
判断操作数是否为空值。如果为NULL,结果返回1;操作数不为NULL,结果返回0,与IS NOT NULL相反
2.3.3.4 BETWEEN AND
判断操作数是否落在某个取值范围内。如果x1>=m,且<=n,结果将返回1;否为0.
练习1

 SELECT product_name,regist_date  FROM product WHERE regist_name>'2009.4.28';

练习2
1(因为都是空的) 空 0 (表数据为空)
练习3

SELECT product_name, sale_price,purchase_price 
  FROM product
 WHERE purchase_price-sale_price <-500;
SELECT product_name, sale_price,purchase_price 
  FROM product
 WHERE sale_price-purchase_price  > 500;

练习4

SELECT product_name,product_type,sale_price*0.9 AS 'profit'
FROM product
WHERE profit-purchase_price >100 AND product_type IN ('kitchen','office');

练习5
WHERE语句应在GROUP BY语句前
SUM只能计算表中数值列中数据的合计值,product_name不是数值列
SELECT 中没有GROUP BY 的关键字
练习6

SELECT product_type,sum(sale_price) AS 'Sum',sum(purchase_price) AS 'sum' 
            FROM product
        GROUP BY product_type
     HAVING Sum > sum*1.5;

练习7

SELECT product_id, product_name, product_type, sale_price, regist_date FROM product ORDER BY -regist_date DESC;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值