SQL学习笔记(一)
一 分类
SQL根据指令种类不同分为三类:
1.1 DDL (Data Definition Language,数据定义语言)
DDL用来创建和删除存储数据用的数据库以及数据库中的表等对象。DDL包含以下指令
- CREATE: 创建数据库和表等对象
- DORP: 删除数据库和表等对象
- ALTER: 修改数据库和表等对象的结构
1.2 DML (Data Manipulation Language,数据操作语言)
DML用来查询和变更表中的记录。DML包含以下几种指令
- SELECT: 查询表中的数据
- INSERT: 向表中插入数据
- UPDATE: 更新表中的数据
- DELETE: 删除表中的数据
1.3. DCL(Data Control Language,数据控制语言)
DCL用来确认或取消对数据库中的数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象进行设定。DCL包含以下几种指令
- COMMIT: 确认对数据库中的数据进行变更
- ROLLBACK: 取消对数据库中的数据进行变更
- GRANT: 赋予用户操作权限
- REVOKE: 取消用户的操作权限
二 SQL语法规则
- SQL语句要以分号(;)结尾
- sql语句不区分大小写
- sql中含有字符串的时候需要用单引号括起来
- sql中的关键字要用空格或者换行分开
三 表的创建
3.1 数据库的创建
在创建表之前要先创建存储表的数据库,创建数据库的语法
CREATE DATABASE <数据库名称>;
3.2 表的创建
创建表的语法:
CREATE TABLE <表名>
(<列名1> <数据类型> <该列所需约束> <comment>,
<列名2> <数据类型> <该列所需约束> <comment>,
<列名3> <数据类型> <该列所需约束> <comment>,
<列名4> <数据类型> <该列所需约束> <comment>,
.. .
<该表的约束1>, <该表的约束2>,……);
3.2.1 表的命名规则
表的名字只能包含半角英文字母、数字、下划线(_),名称只能以半角英文字母开头。在一个数据库中不能出现同名的表,一个表中不能出现同名的列。
3.2.2 表的数据类型的指定
这里仅仅列出标准sql中支持的基本数据类型:
- integer:用来存储整数类型的列
- char:用来存储固定长度字符串的列
- varchar:用来存储可变长度字符串(和固定长度字符串的区别todo)
- date:用来存储日期类型数据的列
3.2.3 表的约束的设置
todo 约束都有什么?
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能
- not null,空是代表空白无记录的意思
- primary key, 主键约束
- unique, 唯一约束,被维护的列中值不能重复,但是允许多个null值
- check,通过一个逻辑表达式来约束列值
- default,默认值 当为设置值的时候使用默认值作为限制条件
四 表的删除和更新
4.1 表的删除
删除表只需要一行语句,使用drop语句
DROP TABLE <表名>;
4.2 表定义的更新
列的更新用alter语句
4.2.1 添加列的语句
ALTER TABLE <表名> ADD COLUMN <列的定义>;
4.2.2 删除列的语句
ALTER TABLE <表名> DROP COLUMN <列名>;
五 查询基础
5.1 select语句基础
从表中选取数据需要使用select语句,语法如下
SELECT <列名>,……
FROM <表名>;
ps:查询结果中列的顺序和SELECT子句中的顺序相同
5.1.1 查询表中所有列
想要查询出表中所有列,可以使用代表所有列的星号(*)
5.1.2 为列设定别名
sql语句中可以使用as关键字为列设定别名。
5.1.3 从结果中删除重复行
如果想在结果中删除重复行,可以通过在select子句中使用distinct来实现。
ps:distinct语句的的错误使用
- distinct语句的只能写在第一列
- distinct语句后有多列时候,表示对多列进行重复判断,而不是仅仅紧跟在distinct那列进行去重。
- null值的记录会去重后保留一个
5.1.4 根据where语句来选择记录
select语句通过where子句来指定查询的条件。语法如下:
SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;
select语句的执行顺序是先通过where子句查询出符合指定条件的记录,然后再选取出select语句指定的列。
5.1.5 算数运算符
四则运算所使用的运算符(+,-,*,/)称为算数运算符。运算符就是使用其两边的值进行四则运算或者字符串拼接,数值计算比较等运算,并返回结果的符号。sql除了算数运算符还有其他各种各样的运算符。
ps:运算符和null值操作
所有运算符和null进行操作的结果都是null值
ps:from语句不是必须的
我们可以使用只包含select的语句进行计算
5.1.6 比较运算符
比较两边的列或者符号称为比较运算符。在where子句中通过使用比较运算符可以组合出各种各样的条件表达式。
= 和~相等
<> 和~不相等 //mysql 里面一般写成 !=
>= 大于等于~
> 大于~
<= 小于等于~
< 小于~
ps;不能对null值进行比较操作
也就是如果某行的值为null,就不会出现在比较的结果中。想要获取到null值的行需要用is null运算符。记得sql中的三值逻辑,除了真假以外还有unknown,也就是null值。
5.1.7 逻辑运算符
- not运算符,将查询条件否定的运算符。
- and运算符,将两侧的查询条件都成立整个查询条件才成立
- or运算符,两侧的查询条件有一个成立整个查询条件就成立
- 通过括号强化处理。有时候遇到运算符优先级的问题,我们需要用括号来强化优先级
注释的写法
注释有两种写法,
- 单行注释: 书写在“--”之后,只能写在同一行
- 多行注释:书写在“/”和“/”之间,可以跨多行