一. SQL(结构化查询语言) DML和DDL
可以把SQL分为两部分: 1.DML (数据操作语言)和 DDL(数据定义语言)
SQL(结构化查询语言)是用于执行查询的语法,但是SQL语言也包含用于更新,插入,删除记录的语法
查询和更新指令构成了SSQL的DML部分:
- SELECT --- 从数据库中获取
- UPDATE ---更新数据库表中的数据
- DELETE ---从数据库表中删除数据
- INSERT INTO ---向数据库中插入数据
SQL的数据定义语言(DDL)部分使我们有能力创建数或删除表格. 我们也可以定义索引(键),规定表之间的连接,以及施加标间的约束.
SQL中最重要的DDL语句
- CREATE DATABASE ---创建新数据库
- AKTER DATABASE --修改数据库
- CREATE TABLE --创建表
- ALTER TABLE --变更(改变)表
- CREATE INDEX ---创建索引(搜索键)
- DROP INDEX --删除索引
二. 语句
1.select
eg : select * from tableName
2.distinct (筛选唯一)
eg: select distinct ColumnName from tableName
3.where(规定筛选标准)
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
where ColumName = ' 列值 '
Tips: SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,不需要引号。
4.and / or
5.order by(对结果集进行排序)
asc : 顺序
desc: 倒叙
6.insert into (向表格中插入行)
eg : 1. insert into tableName value ( value 1 ,value 2 ...) -------insert into Students values('D','Singapore','','','')
2. insert into tableName ( columnName1, columnName2, ...) value (value1, value2 , ...) 指定要插入数据的列
-------------insert into Students(Name,City)values('F','Beiijing')
7.update(修改表中的数据)
语法: update 表名 set 列名 = ' 新值 ' , 列名2 = ' 新值 ' where 列名 = ' 某值 '
8.delete(删除表中的行)
语法 : deletefrom 表名 where 列名 = 值
eg : delete from Students where Address is null
9.top(规定要返回的记录的数目
tips: 不是所有的数据库都支持top
语法: select top number | percent columnName
from tabmeName
MySql :
select columnName
from tableName
limit number
Oracle :
select columnName
from tableName
where rownum <= number
10.like(用于在where子句中搜索列中的指定模式)--模糊查询
语法: selecct columnName
from tableName
where columnName like pattern -------not like pattern
eg: where columnName like ' %g% '-------包含g
where columnName like ' g% ' --------以g为开头
where columnName like ' %g ' --------以g为结尾
where columnName like ' _g% ' ---------更为模糊的查询 ,不知道前面有什么
11.通配符
SQL 通配符必须与 like 运算符一起使用。
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或者 [!charlist] |
不在字符列中的任何单一字符 |
eg: select * from tableName ------------- [charlist]
Where ColumnName1 like ' [ ALN] %'-------------从表中选取列名1以A或L或N开头的
12. in(允许我们在where子句中规定多个值)
语法: select columnName
from tableName
where columnName in (value1, value2 , ...) ----就是在表里找列名中值为啥啥啥的行
13. between(在where子句中使用,作用是选取结余炼制之间的数据范围eg:时间,数值,文本)
语法: select columnName
from tableName
where columnName betweenvalue1 and value2 ------在value1和value2之间的
where columnName not between value1 and value2 -----不在value1和value2之间的
Tips: 不同数据库不同 ,有: 包括value1 不包括value2的,还有包括1和2 的 , 还有不包括1 但包括2的 ,所以使用之前要查一下
sql server 2008 既包含1 又包含 2 (亲测有效)
14. Alianses(Alias 别名 : 可谓列名称和表名称指定别名)
表: select columnName from tableName as AliasName
列: select columnName as Aliasname from tableName
使用别名的作用 : 使用更简单,别名使查询程序更易阅读和书写
eg : 假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po".
现在,我们希望列出 "John Adams" 的所有定单
我们可以使用下面的 SELECT 语句:
select po. orderId , p.LastName, p.FirstName
from Person as p , Product_Orders as po
where p.lastName = 'Adams' and p.firstName = 'John'
对比不用alias
select Product_Orders. orderId , Person.LastName, p.FirstName
from Person , Product_Orders
where Person.lastName = 'Adams' and Person.firstName = 'John'
tips: 只是你给他起了个别名 ,本身他的名字并没有变
15.join (用于根据两个或多个表中的列之间的关系,从这些表中查询数据)
join和key
有时为了得到完整的数据,我们需要从两个或多个表中获得数据结果,这时就需要执行jion
数据库中的表可以通过键将彼此联系起来, 主键(primary key) 是一个列,在这个列中的每一行都是唯一的.
在表中 ,每一个主键的值都是唯一的,这样做的目的是在不重复的每个表中的所有数据的情况下,把表间的数据较差捆绑在一起
请看 "Persons" 表:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
请注意,"Id_P" 列是 Persons 表中的的主键。这意味着没有两行能够拥有相同的 Id_P。即使两个人的姓名完全相同,Id_P 也可以区分他们。
接下来请看 "Orders" 表:
Id_O | OrderNo | Id_P |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 1 |
4 | 24562 | 1 |
5 | 34764 | 65 |
请注意,"Id_O" 列是 Orders 表中的的主键,同时,"Orders" 表中的 "Id_P" 列用于引用 "Persons" 表中的人,而无需使用他们的确切姓名。
请留意,"Id_P" 列把上面的两个表联系了起来。
引用两个表:我们可以通过引用两个表的方式,从两个表中获取数据:
谁订购了产品,并且他们订购了什么产品?
select Person.LastName , Person.FirstName, Orders.orderNofrom Persons, Orders
where Personss.Id_P = Orders,Id_P
结果集
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
使用Join:
使用关键字Join来从两个表中获取数据
如果我们希望列出所有人的定购,可以使用下面的 SELECT 语句:
select Persons.LastName, Persons.FirstName, Orders.OrderNo
from Persons
inner jion Orders --内连接
on Persons.Id_P = Orders.Id_P
order by Persons.LastName ----排序
结果集:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
Tip: 不同的Sql join
除了我们在是上面栗子中使用的 inner join (内连接) ,我们还可以使用其他中连接
下面是他们之间的差异:
- join : 如果表中至少有一个匹配则返回行
- left join : 即使右表中没有匹配, 也从左表返回所有的行
- right join : 即使左表中没有匹配,也从右表返回所有行
- full join : 只要其中一个表存在匹配,就返回行
语法: select columnName
from tableName1
inner join tableName2
on tableName1.columnName = tableName2.columnName
注释:inner join 和 join是相同的
17.left join (左链接 ---- 从左表哪里返回所有的行,即使在右表中没有匹配的行)
语法: select columnName
from tableName1
left join tableName2
on tableName1.columnName = tableName2.columnName
注释: 在某些数据库中, left join 称为 left outer join
18.right join(右链接 --- 从右表哪里返回所有的行,即使在做表中没有匹配的行)
语法: select columnName
from tableName1
right join tableName2
on tableName1.columnName =tableName2.columnName
注释: 在有些数据库中 , right join 称为 right outer join
19.full join (只要其中某个表存在匹配,full join关键字就会返回行)
语法 : select columnName
from tableName1
full join tableName2
on tableName1.columnName = tableName2.columnName
注释: 在某些数据库中, full join 称为 full outer join
20.union (不重复例举)和 union all(例举所有)
union: 用户合并两个或多个select语句的结果集
Notice : union内部的select 语句必须拥有相同数量的列, 列也必须拥有相似