Datawhale MySQL 训练营 Task2 查询语句
目录
MySQL 管理
MySQL版本 8.0.15
MySQL 用户管理 参考
# root 用户登录
mysql -u root -p;
# 添加用户
use mysql;
create user test@localhost identified by 'test123';
# 授予用户全部权限
GRANT ALL on *.* to 'test'@'localhost' WITH GRANT OPTION;
数据库管理
- 创建数据库
CREATE DATABASE db_example;
- 切换数据库
use db_example;
- 删除数据库
drop database <数据库名>;
SQ查询语句
注:SQL 不区分大小写,建议关键词大写增加可读性;SQL 是 0-base 的语句
1. 导入示例数据库,教程 MySQL导入示例数据库
参考 https://www.yiibai.com/mysql/how-to-load-sample-database-into-mysql-database-server.html
2. 查询语句 SELECT
- 从表 tablex 中查询某一列或者某几列:
SELECT
column0,column1,...clomunn
FROM
table_x;
注: SELECT * FROM tabel 可以查询所有列, * 为通配符
- 去重语句 DISTINCT
SELECT DISTINCT vend_id
FROM Products;
DISTINCT 列名 只返回 vend_id 这一列不同的值
- 前N个语句, LIMIT
在 MySQL 中返回前 N 行
SELECT columns
FROM table
LIMIT N;
从第M行开始的N行数据, LIMIT N offset M
MySQL 和 MariaDB 支持简化版本的 LIMIT M,N 语句,逗号前面对应 OFFSET, 逗号后面对应 LIMIT
SELECT columns
FROM table
LIMIT N OFFSET M;
- CASE...END判断语句
3. 筛选语句 WHERE ,过滤
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
- 语句解释: 筛选出 prod_price = 3.49 的prod_name
- 运算符
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
BETWEEN 需要AND 连接上下限;
空值检查: IS NULL 语句
- 操作符
逻辑操作符: AND 连接两个条件 / OR连接两个条件; AND OR 一起用的时候 AND优先级更高,应该用()对操作符分组,()优先级更高
IN 操作符: 指定条件范围,() 内的被筛选出来,与 OR 有同样的作用
NOT 操作符: 否定后面的条件
- 通配符 用来匹配值的一部分的特殊字符; 可以和字面值组合成搜索模式
LIKE 谓词
% 通配符:表示任何字符出现任何次数
_ 通配符: 匹配单个字符
[] 通配符: 指定字符集匹配一个字符
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
4. 分组语句 GROUP BY
- GROUP BY 语句根据一个或多个列对结果集进行分组
- 聚集函数:汇总表中的数据的函数:平均、最大、最小、计数、求和
示例: 统计 prod_price 的平均值保存为 avg_price
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;
- HAVING子句,类似 WHERE,但是WHERE过滤行但是 HAVING 过滤分组,HAVING 支持所有的WHERE的操作符,还支持聚集操作
5. 排序语句 ORDER BY
- 语句解释: 根据 BY 对取出的列进行排序
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
ORDER BY 后面可以是非检索的列,可以是其他列; ORDER BY 应该保证是 SELECT 语句中的最后一条子句(也必须放在 ); 使用选择的列(这里的 prod_id, prod_price, prod_name)排序可以用它们的顺序进行排列如 ORDER BY 2,3
- 正序、逆序
默认正序,可以使用ASC关键字,一般用不上
逆序使用 DESC 关键字;直接位于 DESC 前面的那一列将会按照逆序列排列
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
6. 函数
时间函数: 跟具体的DBMS 有关
SQL 数值函数

SQL字符串函数

另外 MySQL 还提供了丰富的函数,[查表](http://www.runoob.com/mysql/mysql-functions.html)
作业
- 编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
根据以上输入,你的查询应返回以下结果:
-- 创建表
CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(255)
)
-- 插入数据
INSERT INTO email VALUES('1','a@b.com');
INSERT INTO email VALUES('2','c@d.com');
INSERT INTO email VALUES('3','a@b.com');
-- 查询
SELECT
Email
FROM
email
GROUP BY
Email
HAVING COUNT(*) > 1
结果:
- 项目二:查找大国(难度:简单)
创建如下 World 表
+-----------------+------------+------------+--------------+---------------+
| name | continent | area | population | gdp |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
+-----------------+------------+------------+--------------+---------------+
如果一个国家的面积超过300万平方公里,或者(人口超过2500万并且gdp超过2000万),那么这个国家就是大国家。
编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
例如,根据上表,我们应该输出:
+--------------+-------------+--------------+
| name | population | area |
+--------------+-------------+--------------+
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
+--------------+-------------+--------------+
CREATE TABLE World (
name VARCHAR(50) NOT NULL,
continent VARCHAR(50) NOT NULL,
area INT NOT NULL,
population INT NOT NULL,
gdp INT NOT NULL
);
-- 插入数据
INSERT INTO World VALUES( 'Afghanistan', 'Asia',652230,25500100,20343000);
INSERT INTO World VALUES( 'Albania', 'Europe' ,28748,2831741,12960000);
INSERT INTO World VALUES( 'Algeria', 'Africa' ,2381741,37100000,188681000);
INSERT INTO World VALUES( 'Andorra' , 'Europe' ,468,78115,3712000);
INSERT INTO World VALUES( 'Angola' , 'Africa' ,1246700,20609294,100990000);
-- 查询
SELECT
name,population,area
FROM
world
WHERE area>3000000 OR (population > 2500000 AND gdp > 20000000)
结果:
总结
今天好好学习了一下 SQL 的查询、筛选、分组、排序和函数, 总的来说比较简单。
文中主要图表和代码参考 《SQL 必知必会》,人民邮电出版社出版,[美]Ben Forta 著,钟鸣,刘晓霞译。
Datawhale MySQL 训练营 Task2 查询语句的更多相关文章
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- python 3 mysql sql逻辑查询语句执行顺序
python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...
- 深入MySQL(四):MySQL的SQL查询语句性能优化概述
关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...
- MySQL知识树-查询语句
在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...
- PHP中对mysql预编译查询语句的一个封装
原文地址:http://chen-shan.net/?p=474 为了防止sql注入,我们都使用过mysqli这个类,但是每次都需要绑定参数,绑定结果等,比较麻烦,所以可以把这些重复的语句封装成一个函 ...
- Datawhale MySQL 训练营 Task4 表联结
学习内容 MySQL别名 列别名,将查询或者筛选出来列用AS 命名,如果有空格则需要引号 '' SELECT xxx AS xxxx FROM WHERE GROUP BY HAVING 表别名, 把 ...
- Datawhale MySQL 训练营 Task3 表操作
目录 学习内容 1.MySQL 表数据类型 2. 用SQL语句创建表 3. 用SQL语句向表中添加数据 4. 用SQL语句删除表 5. 用SQL语句修改表 作业 参考链接 学习内容 1.MySQL 表 ...
- 转载《mysql 一》:mysql的select查询语句内在逻辑执行顺序
原文:http://www.jellythink.com/archives/924 我的抱怨 我一个搞应用开发的,非要会数据库,这不是专门的数据库开发人员干的事么?话说,小公司也没有数 据库开发人员这 ...
- SQL注入之MySQL常用的查询语句
MySQL是一种使用很广的数据库,大部分网站都是用MySQL,所以熟悉对MySQL数据库的注入很重要. 首先来说下MySQL注入的相关知识点 在MySQL5.0版本之后,MySQL默认在数据库存放一个 ...
随机推荐
- PHP eval() 函数
定义和用法 eval() 函数把字符串按照 PHP 代码来计算. 该字符串必须是合法的 PHP 代码,且必须以分号结尾. 如果没有在代码字符串中调用 return 语句,则返回 NULL.如果代码中存 ...
- 【[SDOI2016]生成魔咒】
这是一道\(SA\)的练手好题 建议做之前先去做一下2408 之后你就肯定会做这道题了 首先上面那道题的答案就是 \[\sum_{i=1}^nn+1-sa[i]-het[i]\] 就是对于每一个后缀求 ...
- Linux无法识别Broadcom 802.11abgn无线网卡
折腾了好久,都无法解决 索性后来直接使用的usb外置网卡,勉强能用(使用极其不便) 最后使尽浑身解数,冲着萤火般的希望,好在没有放弃 正解就是下面这 完成重启即可 sudo cp /sys/fir ...
- Rserve详解,R语言客户端RSclient【转】
R语言服务器程序 Rserve详解 http://blog.fens.me/r-rserve-server/ Rserve的R语言客户端RSclient https://blog.csdn.net/u ...
- Opencv——级联分类器(AdaBoost)
API说明: cv::CascadeClassifier::detectMultiScale(InputArray image,//输入灰度图像 CV_OUT std::vector<Rect& ...
- $NOIp$前的日常
嗯,一想到没准今年\(NOIp\)之后就要退役了,觉得没准这篇博客就是我OI史上的绝唱了-- \(hhh\),希望不会这样. \(12.4\) 退役了是真的233-- 居然感到一身轻松啊qwqwq \ ...
- 矩阵求逆·学习笔记 $\times$ [$LuoguP4783$]矩阵求逆
哦?今天在\(luogu\)上fa♂现了矩阵求逆的板子--于是就切了切. 那么我们考虑一个矩阵\(A\),它的逆矩阵记作\(A^{-1}\),其中对于矩阵这个群来讲,会有\(A \cdot A^{-1 ...
- FFMpeg笔记(一) 使用FFmpeg将任意格式图片转换成任意格式图片
void SrcToDest(char* pSrc, char* pDest,unsigned int nSrcWidth, unsigned int nSrcHeight, AVPixelForma ...
- PCB直角走线的影响
PCB直角走线的影响 布线(Layout)是PCB设计工程师最基本的工作技能之一.走线的好坏将直接影响到整个系统的性能,大多数高速的设计理论也要最终经过 Layout 得以实现并验证,由此可见,布 ...
- 【LeetCode43】 Multiply Strings
题目描述: 解题思路: java代码: public class LeetCode43 { public static void main(String[] args) { String num1=& ...