SQL学习笔记(一)

sql Jun 15, 2019

一 分类

SQL根据指令种类不同分为三类:

1.1 DDL (Data Definition Language,数据定义语言)

DDL用来创建和删除存储数据用的数据库以及数据库中的表等对象。DDL包含以下指令

  1. CREATE: 创建数据库和表等对象
  2. DORP: 删除数据库和表等对象
  3. ALTER:  修改数据库和表等对象的结构

1.2 DML (Data Manipulation Language,数据操作语言)

DML用来查询和变更表中的记录。DML包含以下几种指令

  1. SELECT: 查询表中的数据
  2. INSERT: 向表中插入数据
  3. UPDATE: 更新表中的数据
  4. DELETE: 删除表中的数据

1.3. DCL(Data Control Language,数据控制语言)

DCL用来确认或取消对数据库中的数据进行的变更。除此之外,还可以对RDBMS的用户是否有权限操作数据库中的对象进行设定。DCL包含以下几种指令

  1. COMMIT: 确认对数据库中的数据进行变更
  2. ROLLBACK: 取消对数据库中的数据进行变更
  3. GRANT: 赋予用户操作权限
  4. REVOKE: 取消用户的操作权限

二 SQL语法规则

  1. SQL语句要以分号(;)结尾
  2. sql语句不区分大小写
  3. sql中含有字符串的时候需要用单引号括起来
  4. 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中支持的基本数据类型:

  1. integer:用来存储整数类型的列
  2. char:用来存储固定长度字符串的列
  3. varchar:用来存储可变长度字符串(和固定长度字符串的区别todo)
  4. date:用来存储日期类型数据的列

3.2.3 表的约束的设置

todo 约束都有什么?
约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能

  1. not null,空是代表空白无记录的意思
  2. primary key, 主键约束
  3. unique, 唯一约束,被维护的列中值不能重复,但是允许多个null值
  4. check,通过一个逻辑表达式来约束列值
  5. 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语句的的错误使用

  1. distinct语句的只能写在第一列
  2. distinct语句后有多列时候,表示对多列进行重复判断,而不是仅仅紧跟在distinct那列进行去重。
  3. 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 逻辑运算符

  1. not运算符,将查询条件否定的运算符。
  2. and运算符,将两侧的查询条件都成立整个查询条件才成立
  3. or运算符,两侧的查询条件有一个成立整个查询条件就成立
  4. 通过括号强化处理。有时候遇到运算符优先级的问题,我们需要用括号来强化优先级

注释的写法

注释有两种写法,

  • 单行注释: 书写在“--”之后,只能写在同一行
  • 多行注释:书写在“/”和“/”之间,可以跨多行