SQL语言
第03章_基本的SELECT语句
1. SQL的分类
三条主线
DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索
引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要的语句关键字包括 CREATE 、ALTER、 DROP 、RENAME、 TRUNCATE 等。
DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记
录,并检查数据完整性。
主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。 #增删改查
DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。
主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等
学习技巧:大处着眼,小处着手。
3 - 12 讲表 (3 - 9 SELECT 重中之重!) (10 - 11 DDL、DML)
13 - 17 额外内容
18新特性
2. SQL语言的规则与规范
如果执行SELECT查询语句 注意要对应处于数据库匹配正确!
SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
每条命令以 ; 或 \g 或 \G 结束
关键字不能被缩写也不能分行
关于标点符号
必须保证所有的()、单引号、双引号是成对结束的
必须使用英文状态下的半角输入方式
字符串型和日期时间类型的数据可以使用单引号(’ ')表示
列的别名,尽量使用双引号(" "),而且不建议省略as 2.2 SQL大小写规范 MySQL 在 Windows 环境下是大小写不敏感的
MySQL 在 Linux 环境下是大小写敏感的
数据库名、表名、表的别名、变量名是严格区分大小写的!!!
关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
推荐采用统一的书写规范:
数据库名、表名、表别名、字段名、字段别名等都小写
SQL 关键字、函数名、绑定变量等都大写
2.3 注 释
可以使用如下格式的注释结构
单行注释:#注释文字(MySQL特有的方式)
单行注释:-- 注释文字(–后面必须包含一个空格。) 数据库通用
多行注释:/* 注释文字 */
2.3 命名规则 (第十章注意)
数据库、表名不得超过30个字符,变量名限制为29个
必须只能包含 A–Z, a–z, 0–9, _共63个字符
数据库名、表名、字段名等对象名中间不要包含空格
同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了
导入现有的数据表、表的数据
方式1:source 文件的全路径名
举例: source d:\ xxxx文件名.sql;
图形界面导入数据
工具 - 执行SQL脚本 - 选择数据文件.sql进行导入
3. 基本的SELECT语句
3.0 SELECT…
SELECT 1; #没有任何子句
SELECT 9/2; #没有任何子句
3.1 SELECT … FROM
SELECT 标识选择哪些列
FROM 标识从哪个表中选择
一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。
在生产环境下,不推荐你直接使用 SELECT * 进行查询。
选择特定的列:
SELECT department_id, location_id
FROM departments;
3.2 列的别名
as: as全称为alias (别名),可以省略 原名 AS 别名
重命名一个列
便于计算
紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号(规范),以便在别名中包含空格或特殊的字符并区分大小写。AS 可以省略
建议别名简短,见名知意
举例:
SELECT department_id “公寓”, location_id FROM departments; (显示的列表名)
department_id 改成了别名 公寓
SELECT last_name AS name, commission_pct comm FROM employees;
SELECT salary * 12 AS “aunual salary”
如果别名要有空格如 “aunual salary” 则一定要加" "
id 改成别名为 id_name2
3.3 去重
SELECT DISTINCT id FROM emp; #去重
3.4 空值参与运算
1.空值 null
2.null 不等于0 (比如会归为0号部门,error),(null意为未知)
空值参与运算 结果一定也为空!
实际解决方案: 单行函数 IFNULL(空值名,0) #如果空值就替换为0
3.5 着重号 ``
(~键 不按shift对应的符号``)
如果表名,字段用用了关键字,则一定加着重号 如 order 两边加 `
(博客也是着重号呀–变红)
3.6查询常数
SELECT ‘常数’,123,id,name
FROM emp; #若加常数,每行都会加
3.7 显示表结构
DESCRIBE emp; #显示表结构
或 DESC emp; #只写前四位也行
4.过滤
虽然MySQL不区分大小写,但平常需遵守大小写!!!
#查询90号部门员工信息
SELECT *
FROM employees;
#过滤条件
WHERE depart_id = 90;
#查询last_name 为’King’ 的员工信息
SELECT *
FROM last_name = ‘King’;
WHERE子句 紧跟 FROM子句