SQL基础增删改查

时间:2022-06-17 17:59:20

一、基础语句介绍

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