基本语句
实现
基础知识
DDL
DDL(Data Definition Language,数据定义语⾔) ⽤来创建或者删除存储数据⽤的数据库
以及数据库中的表等对象。DDL 包含以下⼏种指令。
- CREATE : 创建数据库和表等对象
- DROP : 删除数据库和表等对象
- ALTER : 修改数据库和表等对象的结构
DML
DML(Data Manipulation Language,数据操纵语⾔) ⽤来查询或者变更表中的记录。DML
包含以下⼏种指令。
- SELECT :查询表中的数据
- INSERT :向表中插⼊新数据
- UPDATE :更新表中的数据
- DELETE :删除表中的数据
DCL
DCL(Data Control Language,数据控制语⾔) ⽤来确认或者取消对数据库中的数
的变更。除此之外,还可以对 RDBMS 的⽤户是否有权限操作数据库中的对象(数据库
等)进⾏设定。DCL 包含以下⼏种指令。
- COMMIT : 确认对数据库中的数据进⾏的变更
- ROLLBACK : 取消对数据库中的数据进⾏的变更
- GRANT : 赋予⽤户操作权限
- REVOKE : 取消⽤户的操作权限
实际使⽤的 SQL 语句当中有 90% 属于 DML,本书同样会以 DML 为中⼼进⾏讲解
数据类型
四种最基本的数据类型
- INTEGER 型
⽤来指定存储整数的列的数据类型(数字型),不能存储⼩数。 - CHAR 型
⽤来存储定⻓字符串,当列中存储的字符串⻓度达不到最⼤⻓度的时候,使⽤半⻆
补⾜,由于会浪费存储空间,所以⼀般不使⽤。 - VARCHAR 型
⽤来存储可变⻓度字符串,定⻓字符串在字符数未达到最⼤⻓度时会⽤半⻆空格补
变⻓字符串不同,即使字符数未达到最⼤⻓度,也不会⽤半⻆空格补⾜。 - DATE 型
⽤来指定存储⽇期(年⽉⽇)的列的数据类型(⽇期型)。
基础语句
(习题链接)https://sqlzoo.net/wiki/SELECT_from_WORLD_Tutorial
幕布链接 https://share.mubu.com/doc/3G-8BRe-jtb
查询版本
where
where in
WHERE LIKE
“Luxembourg 盧森堡”中有一個x字母,還有一個國家的名字中有x。列出這兩個國家。
找出所有國家,其名字包括字母x。
where col_1 like '_[^JM]%'筛选出的是,第二个字符为非J且非M的数据。
“India 印度”和”Angola 安哥拉”的第二個字母都是 n。
你可以用底線符_當作單一個字母的萬用字元。
找出所有國家,其名字以t作第二個字母。
SELECT name FROM world
WHERE name LIKE '_t%' -- 占位符
ORDER BY name
where or
顯示1980年物理學(physics)獲獎者,及1984年化學獎(chemistry)獲得者。
select yr,subject,winner from nobel
where (subject='Physics' AND yr='1980')
OR
(subject='Chemistry' AND yr='1984')
脱字符
where and 关联
round
BETWEEN
哪些國家是不是太小,又不是太大?
BETWEEN 允許範圍檢查 - 注意,這是包含性的。 此例子顯示面積為 250,000 及 300,000 之間的國家名稱和該國面積。
修改此例子,以顯示面積為 200,000 及 250,000 之間的國家名稱和該國面積。
顯示1980年至1989年(包含首尾)的文學獎(Literature)獲獎者所有細節(年,主題,獲獎者)。
length
left
LIKE 占位符
concat
select name from world
where capital = concat(name,' city');
replace
“Monaco-Ville"是合併國家名字 “Monaco” 和延伸詞”-Ville".
顯示國家名字,及其延伸詞,如首都是國家名字的延伸。
可以使用SQL函數 REPLACE 或 MID.
SELECT name, REPLACE(capital,name,'')
FROM world
WHERE capital LIKE concat(name,'_%')
起名
SELECT 日期 AS 年月 FROM `销售表`;
select 日期 as 年月日 from 销售表
case
select …,case+end,…from world
输出结果:
case 练习
把地区是Europe and Asia作为Eurasia ,North America or South America or
Caribbean作为America ,只显示a开头或者b开头的国家
将各大洲摆放正确…
大洋洲成为大洋洲 欧亚大陆和土耳其的国家前往欧洲/亚洲 以’B’开头的加勒比海岛屿前往北美,其他加勒比海岛屿前往南美
输出: 显示所有国家的名称,原始大陆和新大陆。
SELECT name,continent,
CASE WHEN continent IN ('Eurasia', 'Turkey')
THEN 'Europe/Asia'
WHEN continent = 'Oceania'
THEN 'Australasia'
WHEN continent = 'Caribbean'
THEN
CASE
WHEN name LIKE 'B%'
THEN 'North America'
ELSE 'South America'
END
ELSE continent
END
FROM world
ORDER BY name ASC;
select name, continent, case
when continent='oceania' then 'Australasia'
when continent in ('eurasia', 'turkey') then 'Europe/Asia'
when continent='caribbean' then case
when name like 'B%'
then 'North America'
else 'South America'
end
else continent
end
from world
order by name asc
总结:
1:这篇里面主要涉及到一个CASE WHEN THEN ELSE 的方法
CASE的话,类似于一个判断语句
他可以对字段的值进行判断,并返回你设定的值
内部逻辑代码有WHEN,THEN,ELSE,END
去重
SELECT DISTINCT 商品编码 FROM `销售表`;
表格合并
SELECT CONCAT(店号,店名) AS 店铺 FROM `店铺表`;
习题
习题一
create database shop
use shop
CREATE TABLE addressbook (
regist_no INTEGER NOT NULL,
name VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
PRIMARY KEY (regist_no)
) ;
习题二
假设在创建练习一中的 Addressbook 表时忘记添加如下⼀列 postal_code (邮政编码)
了,请把此列添加到 Addressbook 表中。
列名 : postal_code
数据类型 :定⻓字符串类型(⻓度为 8)
约束 :不能为 NULL
ALTER TABLE addressbook ADD COLUMN postal_code CHAR(8) NOT NULL;
习题三
编写 SQL 语句来删除 Addressbook 表。
TRUNCATE TABLE addressbook;
SHOW TABLES;
习题四
编写 SQL 语句来恢复删除掉的 Addressbook 表。
use shop
CREATE TABLE addressbook
(regist_no INTEGER NOT NULL,
name VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
postal_code CHAR(8) NOT NULL,
PRIMARY KEY (regist_no));
SHOW TABLES;