一、基础语句介绍
SQL 可以分为两个部分:数据操作语言(DML)和数据定义语言(DDL)
1、数据操作语言(DML)基本指令:
select 从数据表中获取数据(现阶阶段,二次开发常用)
update 更新数据库表中的数据
delete 从数据库表中删除数据
insert into 向数据库表中插入数据
2、数据定义语言(DDL)基本指令:
create database 创建新数据库
alter database 修改数据库
create table 创建新表
alter table 变更(改变)数据库表
drop table 删除表
create index 创建索引(搜索键)
drop index 删除索引
Ps: 因为不需要构建一个新的系统(在这里也可以理解为一个前端项目),不需要分析存储数据的类型等内容,所以关于数据定义语言(DDL)部分不进行介绍,主要掌握数据操作语言(DML)的基本指令, 尤其是selelct。这里暂时仅整理关于select 查询指令的内容。
二、数据操作语言(DML)指令
SELECT
Select 列名1,列名2 from 表名称 从表中获取对应的列名1,列名2…对应的数据
Select * from 表名称 从表中获取所有列名对应的数据
结果均存储在一个结果表中(也就是sql sever 的结果界面中)
例如下里表persons中数据进行查询:
Select LastName,firstname from persons (ps:sql 语言不区分大小写,但是习惯单词首字母大写)
persons表:
Id | LastName | FirstName | Address | City |
1 | Adams | John | Oxford | London |
2 | Bush | George | Fifth | New York |
3 | Carter | Thomas | Changan | Beijing |
上述查询结果如下:
LastName | FirstName |
Adams | John |
Bush | George |
Carter | Thomas |
Select * From Persons 查询时结果与persons表的形式一样
Ps:星号(*)是选取所有列的快捷方式
DISTINCT
distinct为sql 关键字,主要用来剔除重复的数据值,返回唯一不同的值。
语法:Select distinct 列名 from 表名
WHERE 子句
主要用途:根据已知条件从表中选取数据
语法:select 列名 from 表名 where 列 运算符 值
运算符可如下:
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
Ps: 在某些版本的sql 中 ,操作符<>可以写成!=。
如果值为字符类型的需要用单引号环绕
Select * from 表名 where 列 = ‘值’ 该值为字符非数字类 , 若是值为数值是可以去除单引号。否则可能出现错误提示 例如:
文本
数值
AND 和 OR
AND 和 OR 可以把where 子语句中两个或多个条件结合起来
AND :所有条件都满足
OR :只要有一个条件满足即可
Ps: 下述例子中 = 的位置可以根据要求替换其他运算符; 理论上条件可以无限制的增加到列n,但是在此处只用两个条件, 条件数目增加与两个条件的结果类似;列1与列2可以相同,请根据实际要求;’条件n’ 等同于 ‘列n=值n’
Select * from 表 where 列1 = 值1 and 列2= 值2
查询显示的结果为表中同时满足条件1、条件2的所有数据
Select * from 表 where 条件1 or 条件2
查询显示的结果:表中满足条件1 和条件2中任意一个的所有数据
ORDER BY 用于对结果集进行排序 ASC 顺(升)序 DESC逆(逆)序
例子:
Orders表
Company | OrderNumber |
IBM | 3532 |
W3School | 2356 |
Apple | 4698 |
W3School | 6953 |
select * from Orders order by company desc(asc)
查询Orders表并对companny中数据进行逆序(顺序)排序输出
对于多次排序语句:
以逆字母顺序显示公司名称,并以数字顺序显示顺序号
Select * from orders order by company desc ,ordernumber
查询orders表,先对companny 进行逆序排序,在对orderNumber 进行顺序排序结果如下
其中 orderNumber 后没有关键字, 即默认asc 顺序(order by 默认时为顺序排序)
Company | OrderNumber |
W3School | 2356 |
W3School | 6953 |
IBM | 3532 |
Apple | 4698 |
关于 insert into、update、delete 只给出基础语句
*切记值的类型根据插入或更新的数据自行判断是否添加引号
之后在有语法中提到值n的时候不在进行解释 , 需要自己在实际工作进行添加引号,语法只为显示语句的使用。
INSERT INTO 用于向表中插入数据
语法
1、Insert into 表名 values(值1,值2……)
上述插入语句,需要知道表中列名的数据类型,values()中的值必须与表中列名一一对应,不可调换位置,不可以缺少值
Eg:
表 student 中列名有 sno ,sname,sage,sex,sclass
正确插入语句 insert into student(1111,’张三’,12,’男’,’十一班’)
错误插入语句 insert into student(1111,12,’男’,’十一班’)
Insert into student(1111,12,’张三’,’男’,’十一班’)
这两种都是错误的插入语句
2、Insert into table_name(列1,列2……)values(值1,值2……)
上述insert into 语句为基本类型的插入语句
以上述语句为基础 ,还有类似符合的insert into 语句 即 插入的数据为查询的结果
Insert intoa table_name(列1,列2……)values(select 值1, 值2,…… from table_name1 where 条件)
这类插入语句,如果对表中的列属性不清楚,很容易出现问题,并不一定适用,不建议使用。还是老老实实的一条一条插入。
UPDATE 用于更新表中的数据
语法
update 表名 set 列名 = 新值 where 列名 = 某值
Ps:列名 = 某值 实际上就是选择条件 之后不在说明。
DELETE 用于删除表中的行数据
语法
delete from 表名 where 列名 = 某值
ps:无论是数据操作语言(dml)还是数据定义语言(ddl)在进行删除delete、drop 操作的时候,最好先对原表进行备份,避免错误操作导致数据丢失。
因为数据库的不同,方法有所差别 ,具体内容可参考下述网站中的内容
http://blog.csdn.net/longshenlmj/article/details/17719323
总结:
上述内容为基本内容,也是工作中使用的最基本的语句。
下面介绍的高级内容,是在基础内容上进行扩充,让查询使用更多的实际情况, 如多表查询,数据类型转换等。其中join 、通配、like、in等需要掌握并会使用,函数内容最好了解,在使用的时候也可以现查。在第二部分,标题前 有星号*的,根据个人经验在工作使用较多的知识点。
实际上高级内容,也是基本内容,如果全能掌握更好,个人建议先将工作中能用到的学会后,在进一步强化学习。
高级内容基本上都是各个模块进行介绍,在实际中可能需要将基础内容+高级内容中N个才能得到工作需要的数据,需要自己进行组合
还有一点说明,在实际工作中, 因为数据库本身问题,部分语句可能并不适用所有数据库,但是并未说明,但是罗列出来的语法内容基本上使用所有数据库,若是出现提示,请根据所使用的数据库查询所需要的语句,例如:mysql的备份语句,oracle的备份语句,sql sever的备份语句。
二、高级内容介绍
*TOP语句 用于规定要返回的记录的数目
SQL sever 语法:
select top number | percent column_name(s) from table_name
number : 返回记录的具体数值
percent: 返回记录的具体百分比
column_name(s) :列名
table_name :表名
eg: select top 2 * from student 查询并返回student中前两条数据
扩展: select top 20% sname from student where sage >18
查询并返回student表中前20%的学生年龄大于18的名字。
Ps:还可对列名进行排序操作,可能出现不同的结果。工作上基本上都会进行排序(order by)操作,使得每次调用数据的时候都可以是相同的顺序。
Oracle mysql 的语法依次如下(top 并不适用这两种数据库系统):
select column_name(s) from table_name rownum <=number
Select column_name(s) from table_name where limit number
*LIKE 用于在where子句中搜索列中的指定模式
语法:
Select column_name(s) from table_name where column_name [NOT] LIKE pattern
Pattern 搜索的规则 一般都会与通配符组合使用
[not] :[]中的内容可以选择使用, like前出现not的时候表示查询的结果为不符合搜索的数据
例:
Person表
Id | LastName | FirstName | Address | City |
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
Select * from Person where city like ‘%g’
结果为id=3的行数据
Select * from person where city not like ‘%g’
结果为剔除id=3的2行数据
‘%g’ 为结尾g的字符集
*通配符 与LIKE运算符一起使用
通配符 | 描述 |
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
通配符
基本上%、_和[charlist]为常用通配符。
Select * from person where city like ‘[ALN]%’
结果 id=1 ,id=2的2行数据
解析:city以“A”、“L”、“N”开头的数据
*IN 实际上允许在where子句中规定多个值
语法:
Select colunm_name(s) from table_name where column_name in(value1,value2,value3……)
解析:column_name 的值只要在(value1,value2,value3……)这个集合里面都是满足条件的
以上述person表为例:
1、Select * from person where lastname in (‘Adams’,’Bush’) 查询姓氏为Adams、Bush的人
2、Select * from person where lastname in (‘Adams’,’Bush’,’Ddddd’)
解析:
查询语句2与1比较,可以发现在集合中多个’Ddddd’ 这个值,但是在person表中并不存在 ,但是一样可以输出与1形同的结果行数据
Id | LastName | FirstName | Address | City |
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
实际上in 语句 也可以理解问类似or运算符的一种简写只要满足的都会被查询出来
Select * from person where lastname in (‘Adams’,’Bush’)
等价于
Select * from person where lastname = ‘Adams’ or lastname = ‘Bu