摘要
因为最近参加校招,题库中有一部分sql语句的题目,感觉不是很难吧?但因之前没学过sql这门语言,当时心里是拒绝的,所以决定发疯图强,找些资料,学了之后根据自己的理解写出来,再说以后肯定也是会用到的,所以学了肯定是有百利而无一害,所以,大家共勉~
鸡汤一则:
“人生不是百米赛跑,而是马拉松~”
本文目录
一、sql 简介
sql是用于访问和处理数据库的标准的计算机语言。
结构化查询语言SQL(STRUCTURED QUERY LANGUAGE)是最重要的关系数据库操作语言,并且它的影响已经超出数据库领域,得到其他领域的重视和采用,如人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等。
什么是sql?
sql指结构化查询语句
sql让我们有能力访问数据库
上面只是大致的介绍了sql的定义和作用,想详细了解,百度一下,我就不在这里赘述了。
二、安装与配置
sql server 2012版
这里我提供了安装链接,大家根据自己的电脑版本自行选择。2012简体中文版官方下载页面:http://www.microsoft.com/zh-cn/download/details.aspx?id=29066
操作系统:
至少等于或者高于win7操作系统版本.内存空间:
最少1GB,推荐使用4GB的内存,最好不要安装在C盘。安装步骤:
具体的安装步骤网上有很多教程,我自己是根据慕课网的教学视频安装的。说的很详细,谢谢慕课网的老师们!这里的学习安装视频地址:http://www.imooc.com/video/8469那当你安装配置好sql server 2012之后,我们开始学习sql语言。
三、sql DML DDL 基础认识
数据库表
一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)。
下面的例子是一个名为”Persons”的表:
name | ages | sex | address | city |
---|---|---|---|---|
张三 | 23 | 男 | 北京路 | 南京 |
李四 | 22 | 男 | 上海路 | 北京 |
小明 | 19 | 男 | 遵义路 | 北京 |
妮儿 | 18 | 女 | 广州路 | 重庆 |
翠花 | 21 | 女 | 天津路 | 哈尔滨 |
上面的表包含四条记录(每一条对应一个人)和五个列(姓名、年龄、性别、地址、城市)
重要事项
sql对大小写不敏感
sql DML 和 DDL
sql DML(数据操作语言)
可以把SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL)。
sql(结构化查询语言)是用于执行查询的语法。sql语言也包括更新、插入和删除记录的语法。
查询和更新指令构成了sql的DML部分:select -从数据库表中获取数据
update -跟新数据库表中的数据
delete -从数据库表中删除数据
insert into -向数据库表中插入数据
sql DDL(数据定义语言)
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。
SQL 中最重要的 DDL 语句:
- create database - 创建新数据库
- alter database - 修改数据库
- create table - 创建新表
- alter table - 变更(改变)数据库表
- drop table - 删除表
- create index - 创建索引(搜索键)
- drop index - 删除索引
四、sql 基本语句简单介绍
下面我先在数据库中创建一个数据表,然后在对数据表进行一系列的操作。
那么先了解在数据库中怎么创建一张数据表?
(一) sql create table 语句
create table语句 用于创建数据库中的表。
sql create table语法
create table 表名
(列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
......
)
数据类型规定了列可容纳何种数据类型。下面的表格包含了sql中最常用的数据类型。
数据类型 | 描述 |
---|---|
integer/int/smallint/tinyint(size) | 仅容纳整数。在括号内规定数字的最大位数 |
decimal/numeric(size,d) | 容纳带有小数的数字。”size”规定数字的最大位数。”d”规定小数点右侧的最大位数 |
char(size) | 容纳固定长度的字符串(可容纳字母,数字以及特殊字符)。在括号中规定字符串的长度 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期 |
那么我们使用create table创建上述的表Persons。
在创建数据Persons表之前,先得先创建一个数据库,可以理解为库是一个容器,创建库的方法很简单,如下图所示就可以创建一个新的数据库,或者使用“create database 数据库名” 语句也可以成功创建一个新的数据库。
use [MyDB] /*use 语句指定数据库*/
create table Persons
(
name varchar(255) not null,
age int not null,
sex varchar(255) not null,
location varchar(255),
city varchar(255)
);
创建好数据表Persons之后,使用insert into 插入数据。insert into 分为行插数据跟列插数据。
insert into 子句
- 行插:insert into 表名称 values(值1,值2,……)
- 列插:insert into 表名称 (列1,列2,……) values(值1,值2,……)
我使用行插方法对表Persons插入数据。
insert into Persons values(N'张三',23,N'男',N'北京路',N'南京');
insert into Persons values(N'李四',22,N'男',N'上海路',N'北京');
insert into Persons values(N'小明',19,N'男',N'遵义路',N'北京');
insert into Persons values(N'妮儿',18,N'女',N'广州路',N'重庆');
insert into Persons values(N'翠花',21,N'女',N'天津路',N'哈尔滨');
得到如下结果集:
(二)sql select 语句
select 语句用于从表中选取数据,结果被存储在一个结果表中。
select 列名 from 表名; /*columns_name为想获取的列*/
select * from 表名; /*如果想获取全部列信息,可用*替代columns_name */
那么假如我想获取上面”Persons”表的name和city列,使用如下sql代码即可得到:
select name,city from Persons ; /*当选取多行时,中间用英文状态下的','分隔开*/
查询结果如下所示:
select * from Persons where sex=N'男'; /*中文前面加"N"*/
查询结果如下所示:
where 子句
作用:where子句用于规定选择的标准。
如需有条件地从表中选取数据,可将where子句添加select语句
select 列名 from 表名 where 列名 运算符 值
下表的运算符可在where子句中使用:
操作符 | 描述 |
---|---|
= | 等于(切记sql中等于为一个”=”号,某些语言中等于为”==”号) |
<> | 不等于(某些版本的sql可以写为”!=”) |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
between and | 在某个范围内 |
like | 搜索某种模式 |
in | 可以规定多个值 |
对上述表中的等于、不等于、小于、不小于、大于、不大于的使用跟其他语言的使用方法一样,在这里不赘述,详细来介绍下between and、like、in的使用方法。
1. between and
between 操作符在where子句中使用,作用是选取介于两个值之间的数据范围。
sql between 语法
select 列名 from 表名 where 列名 between 值1 and 值2; /*语句中的列名可相同可不同,值1与值2的数据类型必须相同*/
使用between and 语句获取表Persons中age在18-22岁的人,sql between语句如下:
select * from Persons where age between 18 and 21; /*between and语句获取的值包含两端的值*/
select * from Persons where age >=18 and age<= 21; /*等同于上句的查询结果*/
查询结果如下所示:
2. like 子句
like 操作符用于在where子句中搜索列中的指定模式。
sql like 操作符语法
select 列名 from 表名 where 列名 like pattern; /* "%" 可用于定义通配符(模式中缺少的字母,还有其他通配符,如"_"等*/
想获取city中以”京”结尾的人,sql语句如下所示:
select * from Persons where city like N'%京';
3. in 子句
in操作符允许在where子句中规定多个值。
sql in 语法:
select 列名 from 表名 where 列名 in (值1,值2)
in操作符实例:想选取出小明和妮儿的数据。
select * from Persons where name in (N'小明',N'妮儿');
查询的结果如下所示:
4. distinct 关键字
distinc关键字用于返回唯一不同的值(有点去重的意思)
distinct 语法:
select distinct 列名 from 表名
对Persons数据表的city列进行distinct操作,sql语句如下:
select distinct city from Persons ;/*找出city列中的唯一值*/
查询的结果如下所示:
5. group by 语句
group by:合计函数,根据一个或多个列对表分组
sql group by 语法:
select 列名,合计函数(列名) as 新列名 from 表名 group by 列名; /*合计函数一般有sum等,as表示为合计函数计算的结果新命名*/
对city列分组,计算其组的平均年龄,sql语句如下:
select city,sum(age) as sum_age from Persons group by city;/*对city分组,然后计算组内年龄的总和*/
查询的结果所下所示:
having 子句
sql语句如下所示:
select city,sum(age) as sum_age from Persons group by city having sum(age)<30; /*这里需要注意的是having必须使用合计函数来查询结果,之前试过用sum_age<30,报错*/
上面讲完了创建数据表(create table 表名)、插入数据(insert into),那么下面简单介绍下修改(update)和删除(delete)表中数据。
(三) update 语句
update 语句用于修改表中的数据。
sql update语法:
update 表名 set 列名=新值 where 列名=某值; /*列名通常不同*/
假如我将李四的age填错了,想做出修改,那么sql 语句如下:
update Persons set age=20 where name=N'李四'; /*中文前加N*/
查询结果如下所示:
(四)delete 语句
dalete 语句用于删除表中的行
sql delete 语法:
delete from 表名 where 列名=值; /*删除符合where条件的行*/
delete from 表名; /*可以在不删除表的情况下删除所有行,意味着表的结构,属性和索引都是完整的,直接删除表为drop 表名*/
假如删除李四的信息,sql语句如下所示:
delete from Persons where name=N'李四'; /*中文前加N*/
查询的结果如下所示:
可以看到Persons表中,李四的信息已经被删除。