MySQL 基础(一)- 查询语句

SQL是什么?MySQL是什么?

SQL是结构化查询语言(Structured Query Language)的缩写,是一种专门用来与数据库通信的语言

MySQL是一种DBMS(数据库管理系统),即它是一种数据库软件

查询语句 SELECT FROM

  • 语句解释:
    SELECT prod_name, prod_id 
    FROM products;
    是指从products中检索一个名为 prod_name 和 prod_id 的列;
  • 去重语句:
    SELECT DISTINCT vend_id
    FROM products;

    SELECT DISTINCT vend_id 告诉MySQL只返回不同(唯一)的vend_id行。

  • 前N个语句
    SELECT prod_name 
    FROM products
    LIMIT 5;

    为了返回第一行或前几行剁使用LIMIT子句;LIMIT 5,5 指示MySQL返回从行5开始的5行,第一个数为开始位置,第二个数为检索的行数;检索出来的第一行为0而不是1;

  • CASE...END判断语句
  • CASE 
    WHEN 条件1 THEN 结果1
    WHEN 条件2 THEN 结果2
    WHEN 条件3 THEN 结果3
    WHEN 条件N THEN 结果N
    END
    CASE 
    WHEN 条件1 THEN 结果1
    WHEN 条件2  THEN 结果2
    ELSE 其他 END

     

  • 筛选语句 WHERE 语句解释
    SELECT prod_name, prod_price
    FROM produces
    WHERE prod_price = 2.50;
    

     在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出

  • WHERE子句运算符/通配符/操作符

操作符

操作符说明
=

等于

<>不等于
!=不等于
<小于
<=

小于等于

>大于
>=大于等于
BETWEEN在指定的两个值之间

通配符,是用来匹配值的一部分的特殊字符。

通配符说明
%在搜索串中,表示任何字符出现任意次数
_用途与%一样,但下划线只匹配单个字符而不是多个字符
[charlist]

字符列中的任何单一字符

[!charlist] 或 [^charlist]不在字符列中的任何单一字符

运算符,限于篇幅,这篇文章讲的比较详细

分组语句 GROUP BY

  • 聚集函数,是指从多个输入行中计算出一个结果,如,我们有在一个行集合上计算 count(数目), sum(和),avg(均值), max(最大值)和min(最小值)的函数。
    SELECT COUNT(*) AS num_items,
    MIN(prod_price) AS price_min,
    MAX(prod_price) AS price_max,
    AVG(prod_price) AS price_avg
    FROM Products

     

  • 语句解释,分组允许把数据分为多个逻辑组,以便能对每个组进行聚焦计算。
    SELECT ven_id, count(*) AS num_prods
    FROM products
    GROUP BY vend_id;

    GROUP BY 字句指示MySQL按vend_id 排序并分组数据,这导致对每个vend_id而不是整个表计算num_prods一次。 

  • HAVING子句,WHERE过滤行,HAVING过滤分组;WHERE在数据分组进行过滤,HAVING在数据分组后进行过滤。HAVING 支持所有WHERE的操作符。
    SELECT cust_id,COUNT(*) AS orders
    FROM orders
    GROUP BY cust_id
    HAVING COUNT(*) >= 2;
    

     

排序语句 ORDER BY

  • 语句解释, 排序产生的输出
    SELECT order_num, SUM(quantity*item_price) AS ordertotal
    FROM orderitems
    GROUP BY order_num
    HAVING SUM(quantity*item_price) >= 50
    ORDER BY ordertotal;

     

  • 正序、逆序,DESC表示降序,ASC表示升序,默认升序。
  • 函数 时间函数 数值函数 字符串函数,菜鸟教程有详细讲解。

SQL注释,支持3种注释风格:

  1. ‘#’字符;
  2. ‘-- ’符号;
  3. '/*balabala*/',允许注释跨越多行
mysql> SELECT 1+1;     # This comment continues to the end of line
mysql> SELECT 1+1;     -- This comment continues to the end of line
mysql> SELECT 1 /* this is an in-line comment */ + 1;
mysql> SELECT 1+
/*
this is a
multiple-line comment
*/
1;

 

SQL代码规范

 


 

项目一:查找重复的电子邮箱(难度:简单)

创建 email表,并插入如下三行数据

IdEmail
1a@b.com
2c@d.com
3a@b.com

编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。

根据以上输入,你的查询应返回以下结果: 

Email
a@b.com

说明:所有电子邮箱都是小写字母。

1. 直接用Navicat创建email表

2.因为MySQL中不止一个数据库,在进行下一步时,需要指定所用到的数据库,email表存放在new_schema中

USE new_schema

接着系统显示 Database changed

3.查询代码

SELECT Email 
  FROM (SELECT Email, COUNT(*) AS Num FROM email GROUP BY Email Having Num > 1) AS table_alias;

结果如下 :

注意,当我用以下代码时,即未给派生表别名时,会报错。

SELECT Email 
  FROM (SELECT Email, COUNT(*) AS Num FROM email GROUP BY Email Having Num > 1);

报告内容为:ERROR 1248 (42000): Every derived table must have its own alias

这句话的意思是说每个派生出来的表都必须有一个自己的别名

 

项目二:查找大国(难度:简单) 创建如下

namecontinent areapopulationgdp
 AfghanistanAsia6522302550010020343000
 Albania Europe28748283174112960000
AlbaniaEurope28748283174112960000
AlbaniaEuropeEurope283174112960000
Albania Europe28748283174112960000

如果一个国家的面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万),那么这个国家就是大国家。 编写一个SQL查询,输出表中所有大国家的名称、人口和面积。 例如,根据上表,我们应该输出:

name populationarea
 Afghanistan 25500100652230
Algeria371000002381741

1-2步与上相同;

3.查询代码

SELECT name, population, area
FROM World
WHERE (area > 3000000) OR (population > 25000000 and gdp > 20000000);

       做这道题目收获是:以往,我一直以为WHERE条件中的字段必须出现在SELECT中,做了这道题,可以知道SELECT 的字段是要在表格展示的字段,虽然gdp在表中未展示,但是仍然可以用在where中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值