一.SQL概述
SQL (Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道,又IBM上世纪70年代开发出来,后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有SQL-86,SQL-89,SQL-92,SQL-99等标准。
SQL有两个重要的标准,分别是SQL92和SQL99,他们分别代表了92和99年颁布的SQL标准,我们今天使用的SQL语言依然遵循这些标准。
不同的数据库生产商都支持SQL语句,但都有特有内容。
1.3 SQL分类
SQL语言在功能上主要分为如下3类:
DDL(Data Definition Languages 数据定义语言)这些语句定义了不同的数据库,表,视图,索引等数据对象,还可以用来创建,删除,修改数据库和数据表的结构。
主要的语句包括create,drop,alter等
DML(Data Manipulation Language 数据操作语言),用于添加,删除,更新和查询数据库记录,并检查数据完整性。
主要的语句关键字包括insert,delete,update,select等
select是SQL语言的基础,最为重要
DCL(Data Control Language 数据控制语言)用于定义数据库,表,字段,用户的访问权限和安全级别。
主要的语句关键字包括grant,revoke,commit,rollback,savepoint等
注:因为查询语句使用的非常频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。还有单独将commit,rollback取出来称为TCL(Transaction Control Language,事务控制语言).
2.SQL语言的规则与规范
SQL可以写在一行或者多行,为了提高可读性,各子句分行写,必要时使用缩进
每条命令以;或\g 或 \G结束
关键字不能被缩写也不能分行
关于标点符号
必须保证所有的(),单引号,双引号是成对出现的。
必须使用英文状态下的半角输入方式
字符串型和日期类型的数据可以使用单引号(' ')表示
列的别名,尽量使用双引号(" "),而且不建议省略as
2.2 SQL大小写的规范(建议遵守)
MySQL在Windows环境下是大小写不敏感的
MySQL在linux环境下是大小写敏感的
数据库名,表名,表的别名,变量名是严格区分大小写的
关键字,函数名,列名(或字段名),列的别名(字段的别名)是忽略大小写的。
推荐采用统一的书写规范
数据库名,表名,表别名,字段名,字段别名等都小写
SQL关键字,函数名,绑定变量等都大写
2.3注释
可以使用如下格式的注释结构
单行注释:#注释的文字(MySQL特有的方式)
单行注释: -- 注释文字 --(-- 后面必须包含一个空格.)
多行注释:/* 注释文字 */
2.4命名规则
数据库,表名不能超过30个字符,变量名限制为29个
必须只能包含A-Z,a-z,0-9,_共63个字符
数据库名,表名,字段名等对象名中间不要包含空格
同一个MySQL软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名。
必须保证你的字段没有和保留字,数据库系统或常用方法冲突,如果坚持使用,请在SQL语句中使用` `(着重号)引起来
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据类型在一个表里是整数,那在另一个表里就变成字符型的了
复习之前的操作
SHOW DATABASES;
USE dbtest2;
SELECT * FROM employees;
#删除表 drop table 表名称
DROP TABLE employees;
#创建emp表(字段名 数据类型)
CREATE TABLE emp(
id INT,
NAME VARCHAR(15)
);
SELECT * FROM emp;
#插入数据
INSERT INTO emp VALUES(1,'张三');
INSERT INTO emp VALUES(2,'李四');
SELECT * FROM emp;
2.5数据导入指令
方式一:在命令行客户端登录mysql,使用source指令导入

之后执行一串操作。就将我们想要添加到数据库的sql文件添加到了我们的数据库中。
之前之后可以使用show databases;来验证sql文件是否添加到我们的的数据库中。

找到所要添加的数据库的路径,点击执行,即可把.sql文件添加到数据库中
添加完成之后可以在SQL yog 中直观的看到atguigudb文件添加过来了。
三.基本的SQL语句
一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符 * ,使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称是,可以通过该它获取他们。
在生产环境下,不推荐你直接使用SELECT * 进行查询
选择特定的列
SELECT department_id, location_id FROM departments;
MySQL中的SQL语句是不区分大小写的,因此SELECT和select的作用是相同的,但是,许多开发人员习惯将关键字大写,数据列和表明小写,读者也应该养成一个良好的编程习惯,这样写出来的代码更容易阅读和维护。
3.2列的别名
普通的查询
给列添加别名之后
从上图可以看到,给列起了别名之后,结果出现的列名不在是之前的名字,而是变成了我们起的别名。
3.3去除重复行
默认情况下,查询会返回全部行,包括重复行。
在SELECT语句中使用关键字DISTINCT去除重复行
#错误的
SELECT salarly, DISTINCT department_id
FROM employees;
注意:这里本来有12行,但是加入了后面添加了salary之后变成了74行。
这里DISTINCT即考虑了department,又考虑了salary,所以会出现这种情况,虽然没有报错,但是这也是没有实际意义的。
3.4空值参与运算
所有运算符或列值遇到null值,运算的结果都为null, 需要特别值得注意的是:null不等同于0
SELECT employee_id,salary,commission_pct,
12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;
这里commission_pct是奖金率的意思,如果commission_pct的值为null,则之前运算的数据都白费,结果为null
这里你一定要注意,在MySQL里面,空值不等于字符串。一个空字符串的长度是0,而一个空值的长度是空。而且,在Mysql里面,空值是占用空间的。
3.5着重号
错误的
正确的
我们需要保证表中的字段,表名等没有和保留字,数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用 ` `(着重号)引起来
四.显示表结构
使用DESCRIBE 或 DESC命令,表示表结构
DESCRIBE employees; 或DESC employees;
其中,各个字段的含义分别解释如下:
Field:表示字段名称。
Type:表示字段类型,这里barcode,goodsname是文本型的,price是整数类型。
Null:表示该列是否可以存储NULL值
key:表示该列是否已编制索引。PRI表示该列是表主键的一部分,UNI表示该列是UNIQUE索引的一部分,MUL表示列中某个给定值允许出现多次。
Default:表示该列是否又默认值,如果有,那么值是多少。
Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。
4.2 where语句
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
使用WHERE子句,将不满足条件的行过滤掉
WHERE子句紧紧跟随FROM子句。