1. 下载示例数据库
下载好数据以后,就按照教程创建数据库和表即可。
所有的代码都在yiibaidb.sql这个文件里,所以不用自己写,用txt打开此文件即可。
比如下图里创建了customer这个表,表里面有哪些字段,插入了哪些数据等等。
下面内容主要来自《SQL比知必会第4版》,需要的可以找我要电子版书~
2. SQL是什么?MySQL是什么?
SQL:结构化查询语言
SQL(发音为字母 S-Q-L或 sequel)是 **Structured Query Language(结构化查询语言)**的缩写。SQL是一种专门用来与数据库沟通的语言。与其他语言(如英语或 Java、C、PHP这样的编程语言)不一样,SQL中只有很少的词,这是有意而为的。设计 SQL的目的是很好地完成一项任务——提供一种从数据库中读写数据的简单有效的方法。
mySQL:DBMS数据库管理系统的一种
3. 查询语句 SELECT FROM
语句解释
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
为了使用 SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
去重语句
办法就是使用 DISTINCT关键字,顾名思义,它指示数据库只返回不同的值。
SELECT DISTINCT column_name
FROM table_name;
前N个语句
如果想限制查询返回的数量,如只返回前N个值,使用关键字LIMIT,用法如下:
SELECT column_name
FROM table_name
LIMIT n;
其中n为需要返回的数量,即前N个。
CASE…END判断语句
case具有两种格式。简单case函数和case搜索函数。
–简单case函数
case sex
when '1' then '男'
when '2' then '女'
else '其他' end
–case搜索函数
case when sex = '1' then '男'
when sex = '2' then '女'
else '其他' end
下面这个链接讲的很清楚:
SQL的case when then else end语句的用法
4. 筛选语句 WHERE
语句解释
数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
语句解释: 从Products表中筛选出 prod_price = 3.49 的 prod_name, prod_price。
运算符/通配符/操作符
and:
or:
and + or:
in:
not:
like:
like %
like _
5. 分组语句 GROUP BY
GROUP BY 语句根据一个或多个列对结果集进行分组
聚集函数:汇总表中的数据的函数:平均、最大、最小、计数、求和
count() 是个聚合函数 作用是求表的所有记录数
select * from 表名 这个是查询表的所有记录
select count(*) from 表名 这个是查询表的所有记录数
语句理解:
count(*) as num_prods看作一个整体
过滤分组:
having:顾名思义,分组+过滤
where和having的区别:
6. 排序语句 ORDER BY
逆向排序: DESC
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price DESC, prod_name;
分组+排序:
7. 函数
时间函数
数值函数
字符串函数
SOUNDEX()函数 第一次听这个函数,感觉挺有意思,例子如下:
8. SQL注释
9、SQL代码规范
10、 作业
项目一:查找重复的电子邮箱(难度:简单)
创建 email表,并插入如下三行数据
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+
编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
根据以上输入,你的查询应返回以下结果:
±--------+
| Email |
±--------+
| a@b.com |
±--------+
说明:所有电子邮箱都是小写字母。
项目二:查找大国(难度:简单)
创建如下 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(255) NOT NULL PRIMARY KEY,
continent VARCHAR(255),
area INT,
population INT,
gdp INT
);