1. 创建数据库并导入示例数据库
创建数据库:
CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE testdb;
创建表:
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);
2. SQL是什么?MySQL是什么?
SQL
SQL(发音为字母 S-Q-L或 sequel)是 Structured Query Language(结构化查询语言)的缩写。SQL是一种专门用来与数据库沟通的语言。与其他语言(如英语或 Java、C、PHP这样的编程语言)不一样,SQL中只有很少的词,这是有意而为的。设计 SQL的目的是很好地完成一项任务——提供一种从数据库中读写数据的简单有效的方法。
SQL 有如下优点:
- SQL不是某个特定数据库供应商专有的语言。几乎所有重要的 DBMS都支持 SQL,所以学习此语言使你几乎能与所有数据库打交道。
- SQL简单易学。它的语句全都是由有很强描述性的英语单词组成,而
- 且这些单词的数目不多。
- SQL虽然看上去很简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
来自百度百科
3. 查询语句 SELECT FROM
通用语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
例如,对于上面新建的表,只需要运行下面语句,即可查看表中所有信息。
SELECT * FROM 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 |
+-------------+-----------+---------+------------+-----------+
去重语句
在 SELECT 后面加入 DISTINCT 可筛选出不同的(具有唯一性)的值。
SELECT DISTINCT continent FROM World;
+-----------+
| continent |
+-----------+
| Asia |
| Europe |
| Africa |
+-----------+
限制结果
使用 LIMIT 语句可以限制返回的条数,若同时使用 OFFSET 会加入偏移(即从跳过几行后开始取)。例如我们从跳过两行后取两条数据:
SELECT * FROM World LIMIT 2 OFFSET 2;
+---------+-----------+---------+------------+-----------+
| name | continent | area | population | gdp |
+---------+-----------+---------+------------+-----------+
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
+---------+-----------+---------+------------+-----------+
CASE.WHEN.END判断语句
CASE WHEN END 语法一般用于判断条件后返回对应的值,其用法有两种:
-- 简单函数
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
-- 搜索函数
CASE WHEN [expr] THEN [result1]…ELSE [default] END
对于前一种,用于判断字段的值:
SELECT *,
CASE continent
WHEN 'Africa' THEN '亚洲'
WHEN 'Europe' THEN '欧洲'
ELSE '其他'
END '大陆'
FROM 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 | 亚洲 |
+-------------+-----------+---------+------------+-----------+--------+
对于后一种,用于对条件语句进行判定,如有多个条件满足,则只会返回第一个符合条件的case,其他忽略:
SELECT *,
CASE
WHEN continent='Africa' THEN '亚洲'
WHEN continent='Europe' THEN '欧洲'
ELSE '其他'
END '大陆'
FROM 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 | 亚洲 |
+-------------+-----------+---------+------------+-----------+--------+
4. 筛选语句 WHERE
通用语法
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
操作符:
以下是操作符列表,可用于 WHERE 子句中。
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
SELECT * FROM World WHERE population > 20000000 and area < 2000000;
+-------------+-----------+---------+------------+-----------+
| name | continent | area | population | gdp |
+-------------+-----------+---------+------------+-----------+
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
+-------------+-----------+---------+------------+-----------+
通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用。在 SQL 中,可使用以下通配符:
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
SELECT * FROM World WHERE continent like 'A%';
+-------------+-----------+---------+----