SlideShare a Scribd company logo
SQL基础培训
目录 
• 数据库与SQL 
• 数据定义语言(DDL) 
• 数据操作语言(DML) 
• 函数概览 
• 索引初步 
• 代码风格
数据库与SQL 
• 名词释义 
– 数据库 
– 关系型数据库 
– 关系型数据库管理系统(RDBMS) 
– 结构化查询语言(SQL) 
• SQL可以用来? 
– 定义数据库结构 
– 查询和修改数据 
– 控制访问权限 
– 编程
常见的关系型数据库产品
库表结构- 类比Excel
库表结构- Navicat
建库建表 
• 创建和删除数据库 
– CREATE DATABASE dw_db; 
– DROP DATABASE dw_db; 
• 创建表 
– CREATE TABLE dw_db_temp.soj_dtl ( 
log_time DATETIME, 
page_id INT, 
guid CHAR(32) 
) ENGINE=MyISAM;
建表语句解析 
• 合法的表名、字段名和索引名: 
– 数字、字母、下划线、美元符号; 
– 可以使用反撇号“`”括起; 
– 表名对大小写敏感,字段名不敏感; 
• 字段类型 
– 数值型:INT,FLOAT,DECIMAL 
– 字符型:CHAR ,VARCHAR ,TEXT 
– 日期型:DATETIME ,TIMESTAMP
建表语句解析 
• 空值和默认值 
– page_id INT NOT NULL DEFAULT 0 
• 存储引擎 
– ENGINE=MyISAM 
– ENGINE=InnoDB 
– ENGINE=BRIGHTHOUSE 
• 编码格式 
– CHARACTER SET=utf8 
• 表注释、字段注释 
– COMMENT ‘页面ID’
建表语句解析 
• 忽略已存在的表 
– CREATE TABLE IF NOT EXISTS soj_dtl (…); 
• 创建临时表 
– CREATE TEMPORARY TABLE soj_dtl (…); 
• 复制表结构 
– CREATE TABLE soj_dtl LIKE soj_dtl_template; 
• 将查询结果保存为表 
– CREATE TABLE soj_dtl AS 
SELECT * FROM soj_dtl WHERE page_id != 0;
表的其他操作 
• 删除表 
– DROP TABLE IF EXISTS soj_dtl; 
• 清空表 
– TRUNCATE TABLE soj_dtl; 
– 等价于DROP + CREATE 
• 重命名 
– RENAME TABLE soj_dtl TO soj_dtl_old;
表的其他操作 
• 修改表结构 
– ALTER TABLE soj_dtl ADD COLUMN url VARCHAR(255); 
– ALTER TABLE soj_dtl CHANGE COLUMN url long_url 
VARCHAR(500); 
– ALTER TABLE soj_dtl DROP COLUMN long_url; 
• 索引 
• 自增ID 
– id INT AUTO_INCREMENT PRIMARY KEY 
• 记录更新时间 
– ON UPDATE CURRENT_TIMESTAMP
插入数据 
• 使用INSERT INTO插入单条或多条记录 
– INSERT INTO soj_dtl (log_time, page_id, guid) 
VALUES (NOW(), 1, ‘AAA’), (NOW(), 2, ‘BBB’); 
• 将查询结果插入表 
– INSERT INTO soj_dtl SELECT * FROM soj_dtl_old; 
• 使用LOAD DATA批量导入数据 
– LOAD DATA INFILE ‘/tmp/mydata’ INTO TABLE soj_dtl 
FIELDS TERMINATED BY ‘,’; 
• 唯一键冲突 
– REPLACE INTO 
– ON DUPLICATE KEY UPDATE
查询数据 
• 普通查询 
– SELECT log_time, page_id FROM soj_dtl 
WHERE page_id IN (1, 2, 3) 
ORDER BY log_time DESC 
LIMIT 10; 
• 分组查询 
– SELECT page_id, COUNT(*) FROM soj_dtl 
GROUP BY page_id 
HAVING COUNT(*) > 100;
SQL表达式 
• 字面量:数字、字符串、日期字符串 
• 运算符:+, -, *, /, MOD 
• 比较运算符:=, !=, <>, >, >=, <, <=, IS (NOT) NULL 
(NOT) IN, BETWEEN AND, LIKE, RLIKE, REGEXP 
• 逻辑运算符:AND, OR, NOT 
• 位运算符 
• 运算符优先级 
• 变量 
• 函数
表关联查询
表关联查询 
• 星型模型
导出查询结果 
• 使用SQL 
– SELECT * FROM soj_dtl 
INTO OUTFILE ‘/tmp/soj_dtl.csv’ 
FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”’ 
LINES TERMINATED BY ‘n’; 
• 使用mysqldump程序 
– mysqldump -h10.20.8.41 -uxxx -pxxx dw_db soj_dtl 
--compact --skip-lock-tables >soj_dtl.txt
更新和删除 
• 更新数据 
– UPDATE soj_dtl SET guid = ‘CCC’ WHERE page_id = 1; 
– UPDATE soj_dtl a, pagename_lkp b 
SET a.page_name = b.page_name 
WHERE a.page_id = b.page_id; 
• 删除数据 
– DELETE FROM soj_dtl WHERE page_id = 1 
ORDER BY log_time LIMIT 10;
函数概览 
• 函数类别 
– 聚合函数:COUNT(DISTINCT), SUM, AVG, STD, MAX, MIN 
– 流程控制:IF, IFNULL, CASE WHEN 
– 类型转换:CAST 
– 字符串操作:SUBSTRING, CONCAT, TRIM, LOWER 
– 数值操作:ROUND, RAND, POW, SIN 
– 时间日期:NOW, DATE_ADD, HOUR, DATE_FORMAT, 
UNIX_TIMESTAMP, FROM_UNIXTIME 
• 自定义函数
索引初步 
• 索引的存储结构:B树 
• 索引的类型: 
– 主键索引 
– 普通索引和唯一索引 
– 单一索引和复合索引 
• 是否需要创建索引? 
– 字段散列程度 
– WHERE条件 
– 容量
使用索引 
• 创建索引 
– ALTER TABLE soj_dtl ADD INDEX idx1 (page_id, log_time); 
• 删除索引 
– ALTER TABLE soj_dtl DROP INDEX idx1; 
• 查看建表语句(含索引) 
– SHOW CREATE TABLE soj_dtl; 
• 查看索引大小 
– SHOW TABLE STATUS LIKE ‘soj_dtl’; 
• 分析查询语句是否用到了索引 
– EXPLAIN SELECT * FROM soj_dtl WHERE log_time < NOW();
代码风格 
• 命名规范 
– 事实表,汇总表采用“dw + 事业部名+ 职能部门名(可 
选) + 表义名”格式构成,中间用下划线隔开; 
– 临时表采用“人名缩写+ 程序模块名+ 表义名”; 
– 表名和字段名尽量不与MySQL关键字冲突。 
• SQL语句 
– 关键字使用大写; 
– 合理使用空格,不紧凑,不留白; 
– 每行不超过80个字符,按子句换行; 
– 避免使用*号,应将字段列表写全; 
– 合理使用注释。
谢谢

More Related Content

PDF
MongoDB for C# developer
PPTX
Hadoop MapReduce Task Scheduler Introduction
PDF
Pytables
PPT
20120324 sql server 2012新特性by_rico
PPTX
Glider
PDF
NoSQL误用和常见陷阱分析
PPT
Redis use cases
PPTX
Mongo db 特性
MongoDB for C# developer
Hadoop MapReduce Task Scheduler Introduction
Pytables
20120324 sql server 2012新特性by_rico
Glider
NoSQL误用和常见陷阱分析
Redis use cases
Mongo db 特性

What's hot (20)

PPTX
NoSQL-MongoDB介紹
PPS
Hadoop基础及hive入门
PPSX
Mysql遇到的一些问题
PDF
Osc scott linux下的数据库优化for_postgresql
PPT
Redis 常见使用模式分析
PPTX
IoTDB OptimizeAndCaseStudy
PPTX
7, OCP - configure database for backup and recovery
PDF
PostGIS 初入門應用
PPTX
Spark streaming经验介绍
PPTX
IoTDB Ops
PPTX
iOS程序设计-数据持久化
PPTX
Mongo db 簡介
PPTX
Spark性能调优分享
PDF
redis 适用场景与实现
PDF
MySQL InnoDB 源码实现分析(一)
PPT
Optimzing mysql
PDF
Template mb-kao
DOC
无数据库日志文件恢复数据库方法两则
PPT
mysql总结
PDF
分布式系统缓存设计
NoSQL-MongoDB介紹
Hadoop基础及hive入门
Mysql遇到的一些问题
Osc scott linux下的数据库优化for_postgresql
Redis 常见使用模式分析
IoTDB OptimizeAndCaseStudy
7, OCP - configure database for backup and recovery
PostGIS 初入門應用
Spark streaming经验介绍
IoTDB Ops
iOS程序设计-数据持久化
Mongo db 簡介
Spark性能调优分享
redis 适用场景与实现
MySQL InnoDB 源码实现分析(一)
Optimzing mysql
Template mb-kao
无数据库日志文件恢复数据库方法两则
mysql总结
分布式系统缓存设计
Ad

Viewers also liked (20)

DOC
Movilidad 2009
PPTX
Actividades del experimental+
DOCX
Colegio nacional nicolás esguerra
PPTX
Mauricio chinchilla mapa_conceptual
PDF
ใบงานท 16
PPTX
Paradigmas emergentes
PDF
Are you a part of Hiring Revolution
PPTX
Escribirlaimagenescrita
PPTX
морская геодезия
DOCX
Crónica encuentro 2014
PPTX
The technology of the future Part I
ODP
El mon electronic.
PPT
Presentation2
PPTX
Practica 13 Innovaciones - Procesos tecnologicos El Norte de Castilla
PPT
Passivevoice
PDF
Informatica
PPTX
Felipe lll LUCIA
PDF
Book drive
PDF
Psida Slide Share
Movilidad 2009
Actividades del experimental+
Colegio nacional nicolás esguerra
Mauricio chinchilla mapa_conceptual
ใบงานท 16
Paradigmas emergentes
Are you a part of Hiring Revolution
Escribirlaimagenescrita
морская геодезия
Crónica encuentro 2014
The technology of the future Part I
El mon electronic.
Presentation2
Practica 13 Innovaciones - Procesos tecnologicos El Norte de Castilla
Passivevoice
Informatica
Felipe lll LUCIA
Book drive
Psida Slide Share
Ad

Similar to Sql基础培训 (20)

PDF
My sql数据库开发的三十六条军规
PDF
MySQL数据库开发的三十六条军规
PDF
Mysql数据库开发的三十六条军规 石展_完整
PDF
Log collection
 
PDF
Oracle中比对2张表之间数据是否一致的几种方法
PDF
Mysql开发与优化
PDF
美团数据库运维平台介绍
PDF
美团数据库运维平台介绍
PDF
MySQL查询优化浅析
PDF
MySQL数据库生产环境维护
PPTX
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
PDF
Build 1 trillion warehouse based on carbon data
PPT
MySQL入門介紹
PDF
服务器基准测试-叶金荣@CYOU-20121130
PDF
改善Programmer生活的sql技能
KEY
111030 gztechparty-小路-云时代的mysql
PPTX
MySQL压力测试经验
PPTX
11, OCP - awr & alert system
PDF
Introduction to CodeIgniter
PPT
数据库性能诊断的七种武器
My sql数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
Mysql数据库开发的三十六条军规 石展_完整
Log collection
 
Oracle中比对2张表之间数据是否一致的几种方法
Mysql开发与优化
美团数据库运维平台介绍
美团数据库运维平台介绍
MySQL查询优化浅析
MySQL数据库生产环境维护
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Build 1 trillion warehouse based on carbon data
MySQL入門介紹
服务器基准测试-叶金荣@CYOU-20121130
改善Programmer生活的sql技能
111030 gztechparty-小路-云时代的mysql
MySQL压力测试经验
11, OCP - awr & alert system
Introduction to CodeIgniter
数据库性能诊断的七种武器

Sql基础培训

  • 2. 目录 • 数据库与SQL • 数据定义语言(DDL) • 数据操作语言(DML) • 函数概览 • 索引初步 • 代码风格
  • 3. 数据库与SQL • 名词释义 – 数据库 – 关系型数据库 – 关系型数据库管理系统(RDBMS) – 结构化查询语言(SQL) • SQL可以用来? – 定义数据库结构 – 查询和修改数据 – 控制访问权限 – 编程
  • 7. 建库建表 • 创建和删除数据库 – CREATE DATABASE dw_db; – DROP DATABASE dw_db; • 创建表 – CREATE TABLE dw_db_temp.soj_dtl ( log_time DATETIME, page_id INT, guid CHAR(32) ) ENGINE=MyISAM;
  • 8. 建表语句解析 • 合法的表名、字段名和索引名: – 数字、字母、下划线、美元符号; – 可以使用反撇号“`”括起; – 表名对大小写敏感,字段名不敏感; • 字段类型 – 数值型:INT,FLOAT,DECIMAL – 字符型:CHAR ,VARCHAR ,TEXT – 日期型:DATETIME ,TIMESTAMP
  • 9. 建表语句解析 • 空值和默认值 – page_id INT NOT NULL DEFAULT 0 • 存储引擎 – ENGINE=MyISAM – ENGINE=InnoDB – ENGINE=BRIGHTHOUSE • 编码格式 – CHARACTER SET=utf8 • 表注释、字段注释 – COMMENT ‘页面ID’
  • 10. 建表语句解析 • 忽略已存在的表 – CREATE TABLE IF NOT EXISTS soj_dtl (…); • 创建临时表 – CREATE TEMPORARY TABLE soj_dtl (…); • 复制表结构 – CREATE TABLE soj_dtl LIKE soj_dtl_template; • 将查询结果保存为表 – CREATE TABLE soj_dtl AS SELECT * FROM soj_dtl WHERE page_id != 0;
  • 11. 表的其他操作 • 删除表 – DROP TABLE IF EXISTS soj_dtl; • 清空表 – TRUNCATE TABLE soj_dtl; – 等价于DROP + CREATE • 重命名 – RENAME TABLE soj_dtl TO soj_dtl_old;
  • 12. 表的其他操作 • 修改表结构 – ALTER TABLE soj_dtl ADD COLUMN url VARCHAR(255); – ALTER TABLE soj_dtl CHANGE COLUMN url long_url VARCHAR(500); – ALTER TABLE soj_dtl DROP COLUMN long_url; • 索引 • 自增ID – id INT AUTO_INCREMENT PRIMARY KEY • 记录更新时间 – ON UPDATE CURRENT_TIMESTAMP
  • 13. 插入数据 • 使用INSERT INTO插入单条或多条记录 – INSERT INTO soj_dtl (log_time, page_id, guid) VALUES (NOW(), 1, ‘AAA’), (NOW(), 2, ‘BBB’); • 将查询结果插入表 – INSERT INTO soj_dtl SELECT * FROM soj_dtl_old; • 使用LOAD DATA批量导入数据 – LOAD DATA INFILE ‘/tmp/mydata’ INTO TABLE soj_dtl FIELDS TERMINATED BY ‘,’; • 唯一键冲突 – REPLACE INTO – ON DUPLICATE KEY UPDATE
  • 14. 查询数据 • 普通查询 – SELECT log_time, page_id FROM soj_dtl WHERE page_id IN (1, 2, 3) ORDER BY log_time DESC LIMIT 10; • 分组查询 – SELECT page_id, COUNT(*) FROM soj_dtl GROUP BY page_id HAVING COUNT(*) > 100;
  • 15. SQL表达式 • 字面量:数字、字符串、日期字符串 • 运算符:+, -, *, /, MOD • 比较运算符:=, !=, <>, >, >=, <, <=, IS (NOT) NULL (NOT) IN, BETWEEN AND, LIKE, RLIKE, REGEXP • 逻辑运算符:AND, OR, NOT • 位运算符 • 运算符优先级 • 变量 • 函数
  • 18. 导出查询结果 • 使用SQL – SELECT * FROM soj_dtl INTO OUTFILE ‘/tmp/soj_dtl.csv’ FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘”’ LINES TERMINATED BY ‘n’; • 使用mysqldump程序 – mysqldump -h10.20.8.41 -uxxx -pxxx dw_db soj_dtl --compact --skip-lock-tables >soj_dtl.txt
  • 19. 更新和删除 • 更新数据 – UPDATE soj_dtl SET guid = ‘CCC’ WHERE page_id = 1; – UPDATE soj_dtl a, pagename_lkp b SET a.page_name = b.page_name WHERE a.page_id = b.page_id; • 删除数据 – DELETE FROM soj_dtl WHERE page_id = 1 ORDER BY log_time LIMIT 10;
  • 20. 函数概览 • 函数类别 – 聚合函数:COUNT(DISTINCT), SUM, AVG, STD, MAX, MIN – 流程控制:IF, IFNULL, CASE WHEN – 类型转换:CAST – 字符串操作:SUBSTRING, CONCAT, TRIM, LOWER – 数值操作:ROUND, RAND, POW, SIN – 时间日期:NOW, DATE_ADD, HOUR, DATE_FORMAT, UNIX_TIMESTAMP, FROM_UNIXTIME • 自定义函数
  • 21. 索引初步 • 索引的存储结构:B树 • 索引的类型: – 主键索引 – 普通索引和唯一索引 – 单一索引和复合索引 • 是否需要创建索引? – 字段散列程度 – WHERE条件 – 容量
  • 22. 使用索引 • 创建索引 – ALTER TABLE soj_dtl ADD INDEX idx1 (page_id, log_time); • 删除索引 – ALTER TABLE soj_dtl DROP INDEX idx1; • 查看建表语句(含索引) – SHOW CREATE TABLE soj_dtl; • 查看索引大小 – SHOW TABLE STATUS LIKE ‘soj_dtl’; • 分析查询语句是否用到了索引 – EXPLAIN SELECT * FROM soj_dtl WHERE log_time < NOW();
  • 23. 代码风格 • 命名规范 – 事实表,汇总表采用“dw + 事业部名+ 职能部门名(可 选) + 表义名”格式构成,中间用下划线隔开; – 临时表采用“人名缩写+ 程序模块名+ 表义名”; – 表名和字段名尽量不与MySQL关键字冲突。 • SQL语句 – 关键字使用大写; – 合理使用空格,不紧凑,不留白; – 每行不超过80个字符,按子句换行; – 避免使用*号,应将字段列表写全; – 合理使用注释。