一、什么是SQL?
SQL 是用于访问和处理数据库的标准的计算机语言。
二、SQL 能做什么?
SQL 面向数据库执行查询
SQL 可从数据库取回数据
SQL 可在数据库中插入新的记录
SQL 可更新数据库中的数据
SQL 可从数据库删除记录
SQL 可创建新数据库
SQL 可在数据库中创建新表
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限
三、在学语法之前,需要注意的是:
1. SQL 对大小写不敏感
四、SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
查询和更新指令构成了 SQL 的 DML 部分:
SELECT- 从数据库表中获取数据
UPDATE- 更新数据库表中的数据
DELETE- 从数据库表中删除数据
INSERT INTO- 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
CREATE DATABASE- 创建新数据库
ALTER DATABASE- 修改数据库
CREATE TABLE- 创建新表
ALTER TABLE- 变更(改变)数据库表
DROP TABLE- 删除表
CREATE INDEX- 创建索引(搜索键)
DROP INDEX- 删除索引
五、具体的一些基本语法
1. select 语法
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
SELECT 列名称1,列名称2 FROM 表名称
2. select distinct
用来剔除掉一些重复的值,用法同select
select distinct 列名称 from 表名称
3. where
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
其中运算符可以是常见的等号,大于号等,也可以是 between(在某个范围内), like(搜索某种模式)
4. and , or
顾名思义,就是或 和且 的关系
5. order by
对结果进行升序的排序
如果想要按照降序排序,可以语句末尾使用desc关键字
6. insert info 语句
可以向表格里面插入新的行
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
7. update
去修改表中的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
8. delete
DELETE FROM 表名称 WHERE 列名称 = 值
多说两句:千万别乱删东西啊,这些东西删了,就找不回来了
所以我们DPW 这边有弄个cronjob,每天定时去备份数据库,放在IT那边
9. TOP ,limit,rownum
规定要返回的记录数目
注意:不是每个数据库习题都支持top语句,但是有类似的
比如: SQL server的语法:
SELECT TOP number|percent column_name(s) FROM table_name
MySQL的语法
SELECT column_name(s) FROM table_name LIMIT number
Oracle的语法
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
三者举例:
10. Like
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
举例:
1. 表示查找B开头的parameter_id 集合
2. 表示查找e为结尾的parameter_id 集合
提示:"%" 可用于定义通配符(模式中缺少的字母)。
也可以结合NOT 关键字,表示反选
eg :SELECT *from app_parameterwhere parameter_idNOT LIKE'B%';
11. 通配符
像上面说的 %,就是一个通配符,常用通配符如下
注意:通配符必须和LIKE 一起使用
12 IN
IN 操作符允许我们在 WHERE 子句中规定多个值。
和where一起使用
13 between and
这个写法一般是取两者之间的范围,可以是数值,文本或者日期
也可以结合NOT ,取反
搜索结果
14 join
为了得到完整的结果,我们需要从两个或者多个表中获取结果,这时候就要用到join
Person:
这个表里面,id_P就是这个表的主键
然后看下Order 这个表
注意了,这边的id_O是这个表的主键,同时,order表中的id_P引用了person里面的人,而无需使用它们的确切名字
所以,这两个表,利用了id_P ,串联了起来
可以这样使用:
SELECT * FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
在放我项目里,我举个例子:
第一张表: app_profile
第二张表:
现在,我想搜这两张表的所有organation_id = = 9Nno1vGQUKpp3wf7_nGqg的数据
也可以用join 的关键字来表达,比如这两句是等同的
不同的SQL JOIN
INTER JOIN 是属于内连接,和JOIN 一样
LEFT JOIN: 不管右表中没有匹配,都会从左表返回所有的行
RIGHT JOIN: 不管左表中没有匹配,都会从右表返回所有的行
FULL JOIN: 全部输出左右表所有的行
15 UNION
用于合并两个或者多个select语句的结果集
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同
举个例子:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
那这样的结果就是:
16 select into
从一个表中选取数据,然后把数据插入另一个表中
常用于创建表的备份附件或用户对记录进行存档
语法:
1. 把所有的列插入新表
SELECT * INTO new_table_name FROM old_tablename
2. 只把希望的列插入新表
SELECT column_name(s) INTO new_table_name FROM old_tablename
3. 也可以和where相结合
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'
后面的(17-28)比较Corner,大家了解一下即可
17 create database
用户创建数据库,语法为: CREATE DATABASE database_name
18 create table
用于创建表,语法为: create table tableName ( 列名称1 数据类型, 列名称2 数据类型)
19 constraints
这个是约束,比如创建表后的一些约束
这个在下面会具体说到
20 not null
强制约束不接受NULL 值
create table tableName ( 列名称1 数据类型 NOT NULL, 列名称2 数据类型)
21 unique
强制约束唯一性
create table tableName (列名称1 数据类型 NOT NULL, 列名称2 数据类型 UNIQUE)
22 PRIMARY KEY
约束唯一表示数据库的每条记录
create table tableName ( 列名称1 数据类型 PRIMARY KEY , 列名称2 数据类型 UNIQUE)
23 FOREIGN KEY
24 check
只能放入特定的值(true,false)
25 default
默认值
26 create index
创建索引
在不读取整个表的情况下,索引使数据库应用程序可以更快的查找数据
介绍下什么是索引
您可以在表中创建索引,以便更加快速高效地查询数据
用户无法看到索引,他们只能被用来加速搜索/查询
语法:
27 drop (一定要慎用)
使用drop语句,可以撤销索引、表以及数据库
删除索引:
删除表:
删除数据库:
仅仅删除表内的数据,不删除表本身
28 ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、修改或者删除列
添加列 :
删除列:
29 AUTO INCREMENT
auto increment 会在新纪录插入表中时,生成一个唯一的数据
我们通常希望在每次插入新纪录时,自动创建主键字段的值
语法:
默认 auto increment 是从1开始,要是从其他值开始,要执行这句:
ALTER TABLE Persons AUTO_INCREMENT=100
29 VIEW
视图是可视化的表
SQL中,视图是基于SQL语句的结果集的可视化的表
视图包含行和列,就像一个真实的表。视图的字段就是来自一个或者多个数据库中真实的表中的字段。
我们可以像视图添加SQL函数,where以及join语句等
create view 语法:
视图总是显示最近的数据,每当用户查询视图时,数据库引起通过SQL语句来重建数据
举个例子:
创建view:
查看它:
更新视图语法
例子:
查看结果就是:
撤销视图
DROP VIEW viewName
30 null
null值是遗漏的未知数据
默认,表的列可以存放null值
我们可以用 is null 或者 is not null 来判断是否为空值,null 和 0 是不等价的