一.SQL分类
SQL语言在功能上分为三大类:
-
DDL(Data Definition Language,数据定义语言)
这些不仅定义了不同的数据库,表,视图,索引,等数据库对象,还可以用来创建,删除,修改数据库和数据表的结构
-
主要关键字 CREATE,DROP,ALTER
-
-
DML(Data Manipulation Language,数据库操作语言)
用于添加,删除,更新和查询数据库记录,并检查数据的完整性
-
主要关键字 INSERT,DELETE,UPDATE,SELECT
-
SELECT是SQL语言基础,最为重要
-
-
DCL(Data Control Language,数据库控制语言)
用于定义数据库,表,字段,用户的访问权限和安全级别
-
主要关键字 GRANT,REVOKE,COMMIT,ROLLBACK,SAVEPOINT
-
-
DQL(数据查询语言)
-
TCL(Transaction Control LAnguage,事务控制语言)
-
主要关键字 COMMIT,ROLLBACK
-
二.SQL语言的规范与规则
1.基本规则
-
SQL可以写在一行或多行,为了提高可读性,各字句分行写,必要时使用缩进
-
每条命令以 ; 或 \g 或 \G 结束
-
关键字不能被缩写也不能分行
-
关于标点符号:
-
必须保证所有的(),单引号,双引号是成对结束的
-
必须使用英文状态下的半角输入方式
-
字符串类型和日期时间类数据可用单引号(' ')表示
-
列的表名,尽量使用双引号(" "),而且不建议省略as
-
简单操作
USE test1;
SELECT * FROM emp;
INSERT INTO emp;
VALUE(1002,'TOM');
2.SQL大小写规范
-
MySQL在Windows下对大小写不敏感
-
在linux下对大小写敏感,因此有的要区分大小写
-
数据库名,表名,表的别名,变量名严格区分大小写
-
关键字,函数名,列名(或字段名),列的别名(字段的别名)忽略大小写
-
-
推荐使用统一编写规范:
-
数据库名,表名,表的别名,字段名,字段的别名等都使用小写
-
SQL关键字,函数名,绑定变量等都使用大写
-
3.注释
-
单行注释: # 注释文字
--注释文字(--后面必须包含一个空格)
-
多行注释: /* 注释文字 */
4.命名规则
-
数据库,表名不得超过30个字符,变量名限制为29个字符
-
数据库名,表名,必须只能包含A-Z,a-z,0-9,_共63个字符
-
数据库名,表名,字段名等对象名中间不要包含空格
-
同一个MySQL软件中,数据库名不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
-
必须保证字段中没有和保留字,数据库系统或常用方法冲突
-
必须保证字段名和类型的一致性,在命名字段并为其指定数据类型时一定要保证一致性
5. 数据导入指令
①source 文件名的全路径
如: source d:\test.sql;
②基于具体图形化界面工具
如: SQLyog中: 选择"工具"--"执行脚本"--"选中xxx.sql文件"
三.基本的SELECT语句
0.SELECT...
SELECT 1; #没有任何字符
SELECT a/2;
1.SELECT...FROM表名(中间可以添加多个字段)
-
语法:
SELECT #标识选择哪些列 FROM #标识从哪个表中选择
例如
SELECT 1+1,2*3
FROM DUAL; #DUAL为伪表
-
选择全部列
SELECT * FROM departments; #生产环境下不推荐使用SELECT * 查询 #SELECT * 代表查询表中的所有字段(或列)
-
选择特定列
SELECT employees_id,last_name FROM employees;
2.列的别名
as:
-
全称为alias(别名),使用时可以省略
-
列的别名也使用一对" "引起来,不能使用' '.
SELECT employees_id emp_id,last_name AS lname,department_id "部门id";
3.去除重复行
-
默认情况下,查询会返回全部行,包括重复行
-
在SELECT语句中使用关键字DISTINCT去除重复行
SELECT DISTINCT department_id #这样就去除了数据中的重复行 FROM employees;
注:
①DISTINCT需要放在所有列名的前面
写 SELECT salary,DISTINCT department
FROM employees 会报错
②DISTINCT 其实是对后面所有列名的组合去重
4.空值参与 运算
-
所有运算符或列值遇到NULL值,运算结果均为NULL
-
注:
-
在MySQL中,空值不等于空字符串,一个空字符串的长度为0,而一个控制的长度为空
-
且在MySQL中,空值是占用空间的
-
-
处理方法: 引入IFNULL
SELECT employees,salary "月工资",salary * (1 + IFNULL(commission_pct,0))*12 "年工资" FROM employees;
5.着重号``
-
出现字段名或表名与关键字,保留字重名时,需要加着重号
6.查询常数
-
只要后面字段来自某张表,前面作为常数出现的每行都会匹配
四.显示表结构
-
使用DESCRIBE 或 DESC 命名表的显示表结构
DESCRIBE employees; 或 DESC employees;
显示了表中字段的详细信息
五.过滤数据
-
语法:
SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件
-
使用WHERE子名,将不满足条件的行过滤掉
-
WHERE字句紧随FROM字句
SELECT employees_id,last_name FROM employees WHERE LAST_NAME = 'King'; #此处的''中应该注意大小写,MySQL中大小写执行标准不规范,因此当写错时也会查询出来