因为最近参加校招, 题库中有一部分 sql 语句的题目, 感觉不是很难吧? 但因之前没学过 sql 这门语言, 当时心里是拒绝的, 所以决定发疯图强, 找些资料, 学了之后根据自己的理解写出来, 再说以后肯定也是会用到的, 所以学了肯定是有百利而无一害, 所以, 大家共勉~
鸡汤一则:
"人生不是百米赛跑, 而是马拉松~" 本文目录 一 sql 简介 sql 是用于访问和处理数据库的标准的计算机语言 什么是 sql 二安装与配置 sql server 2012 版 三 sql DML DDL 基础认识 数据库表 重要事项 sql DML 和 DDL SQL 中最重要的 DDL 语句 四 sql 基本语句简单介绍 一 sql create table 语句 insert into 子句 二 sql select 语句 where 子句 between and like 子句 in 子句 distinct 关键字 group by 语句 having 子句 三 update 语句 四 delete 语句 一, 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" 的表:
nameagessexaddresscity
张三 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 语法
createtable 表名 (列名称 1 数据类型, 列名称 2 数据类型, 列名称 3 数据类型, ......)
1
2
3
4
5
6
数据类型规定了列可容纳何种数据类型. 下面的表格包含了 sql 中最常用的数据类型.
数据类型描述
integer/int/smallint/tinyint(size) 仅容纳整数. 在括号内规定数字的最大位数
decimal/numeric(size,d) 容纳带有小数的数字."size" 规定数字的最大位数."d" 规定小数点右侧的最大位数
char(size) 容纳固定长度的字符串 (可容纳字母, 数字以及特殊字符). 在括号中规定字符串的长度
varchar(size) 容纳可变长度的字符串(可容纳字母, 数字以及特殊的字符). 在括号中规定字符串的最大长度.
date(yyyymmdd) 容纳日期
那么我们使用 create table 创建上述的表 Persons.
在创建数据 Persons 表之前, 先得先创建一个数据库, 可以理解为库是一个容器, 创建库的方法很简单, 如下图所示就可以创建一个新的数据库, 或者使用 "create database 数据库名" 语句也可以成功创建一个新的数据库.
![创建数据库](http://img.blog.csdn.net/20160918155200353) 创建好数据库之后, 我在数据库中创建一张数据表, 把我上面的 Persons 的值全插入进去, 进行后面的 sql 操作. 但是由于中文与 sql 默认 ** 编码不符 **, 所以会出现全是 **???** 的乱码, 所以我先解决编码问题. 解决编码问题, 以 sql server 2012 为例, 详细步骤如:** 右键点击刚创建好的数据库 -> 属性 -> 选项 -> 排序规则 -> 选择为 Chinese_PRC_CI_AS** 解决好上述一系列问题之后, 就可以创建一个数据表了, 我以上面的 Persons 表为例. sql 语句如下:
use [MyDB]/*use 语句指定数据库 */createtablePersons (namevarchar(255)notnull, ageintnotnull, sexvarchar(255)notnull, locationvarchar(255), cityvarchar(255) );
1
2
3
4
5
6
7
8
9
创建好数据表 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 '哈尔滨');
1 2 3 4 5
得到如下结果集:
![插入数据之后的结果集](http://img.blog.csdn.net/20160918173018303) 下面使用我生成好的数据表 Persons 进行下面的 sql 操作. -
(二)sql select 语句
select 语句用于从表中选取数据, 结果被存储在一个结果表中.
select 列名 from 表名;/*columns_name 为想获取的列 */select*from 表名;/* 如果想获取全部列信息, 可用 * 替代 columns_name */
1
2
那么假如我想获取上面 "Persons" 表的 name 和 city 列, 使用如下 sql 代码即可得到:
selectname,cityfromPersons ;/* 当选取多行时, 中间用英文状态下的','分隔开 */
1
查询结果如下所示:
![选择列为 name 和 city](http://img.blog.csdn.net/20160918173836167) 那么假如我希望此结果只输出性别为男性的数据, 此处用 where 子句. 如下 sql 语句所示:
select*fromPersonswheresex=N'男';/* 中文前面加 "N"*/
1
查询结果如下所示:
![使用 where 找出性别为男的数据](http://img.blog.csdn.net/20160918174619373) 下面对 where 子句进行详细介绍
where 子句
作用: where 子句用于规定选择的标准.
如需有条件地从表中选取数据, 可将 where 子句添加 select 语句
select 列名 from 表名 where 列名 运算符 值
1
下表的运算符可在 where 子句中使用:
操作符描述
= 等于 (切记 sql 中等于为一个 "=" 号, 某些语言中等于为 "==" 号)
<> 不等于 (某些版本的 sql 可以写为 "!=")
> 大于
< 小于
>= 大于等于
<= 小于等于
between and 在某个范围内
like 搜索某种模式
in 可以规定多个值
对上述表中的等于, 不等于, 小于, 不小于, 大于, 不大于的使用跟其他语言的使用方法一样, 在这里不赘述, 详细来介绍下 between and,like,in 的使用方法.
1. between and
between 操作符在 where 子句中使用, 作用是选取介于两个值之间的数据范围.
sql between 语法
select 列名 from 表名 where 列名 between 值 1and 值 2;/* 语句中的列名可相同可不同, 值 1 与值 2 的数据类型必须相同 */
1
使用 between and 语句获取表 Persons 中 age 在 18-22 岁的人, sql between 语句如下:
select*fromPersonswhereage between18and21;/*between and 语句获取的值包含两端的值 */select*fromPersonswhereage >=18andage<=21;/* 等同于上句的查询结果 */
1
2
3
查询结果如下所示:
![使用 between and 语句查询一个范围内的数据](http://img.blog.csdn.net/20160918175057891)
2. like 子句
like 操作符用于在 where 子句中搜索列中的指定模式.
sql like 操作符语法
select 列名 from 表名 where 列名 likepattern;/* "%" 可用于定义通配符(模式中缺少的字母, 还有其他通配符, 如 "_" 等 */
1
想获取 city 中以 "京" 结尾的人, sql 语句如下所示:
select * fromPersonswherecitylikeN '% 京';
1
![like 操作符](http://img.blog.csdn.net/20160918182423374)
3. in 子句
in 操作符允许在 where 子句中规定多个值.
sql in 语法:
select 列名 from 表名 where 列名 in(值 1, 值 2)
1
in 操作符实例: 想选取出小明和妮儿的数据.
select * fromPersonswherenamein(N '小明', N '妮儿');
1
查询的结果如下所示:
![in 子句的查询结果](http://img.blog.csdn.net/20160918180952897)
4. distinct 关键字
distinc 关键字用于返回唯一不同的值 (有点去重的意思)
distinct 语法:
selectdistinct 列名 from 表名
1
对 Persons 数据表的 city 列进行 distinct 操作, sql 语句如下:
selectdistinctcityfromPersons ;/* 找出 city 列中的唯一值 */
1
查询的结果如下所示:
![distinct 找出列的唯一值](http://img.blog.csdn.net/20160920092024222)
5. group by 语句
group by: 合计函数, 根据一个或多个列对表分组
sql group by 语法:
select 列名, 合计函数 (列名)as 新列名 from 表名 groupby 列名;/* 合计函数一般有 sum 等, as 表示为合计函数计算的结果新命名 */
1
对 city 列分组, 计算其组的平均年龄, sql 语句如下:
selectcity,sum(age)assum_agefromPersonsgroupbycity;/* 对 city 分组, 然后计算组内年龄的总和 */
1
查询的结果所下所示:
![group by 分组函数](http://img.blog.csdn.net/20160920093835902) 那么假如我想找出年龄和小于 30 的 city, 怎么做呢? 首先我会想到用 where 语句来锁定范围, 但是呢? sql 中 where 关键字无法与合计函数一起使用,*** 不信你自己试试呗 ***! 这也正是 **having 子句 ** 出现的原因, 那么下面我使用 having 子句来查询我想要的结果.
having 子句
sql 语句如下所示:
selectcity,sum(age)assum_agefromPersonsgroupbycityhavingsum(age)<30;/* 这里需要注意的是 having 必须使用合计函数来查询结果, 之前试过用 sum_age<30, 报错 */
1
上面讲完了创建数据表 (create table 表名), 插入数据 (insert into), 那么下面简单介绍下修改 (update) 和删除 (delete) 表中数据.
(三) update 语句
update 语句用于修改表中的数据.
sql update 语法:
update 表名 set 列名 = 新值 where 列名 = 某值;/* 列名通常不同 */
1
假如我将李四的 age 填错了, 想做出修改, 那么 sql 语句如下:
updatePersonssetage=20wherename=N'李四';/* 中文前加 N*/
1
查询结果如下所示:
![对数据修改 update](http://img.blog.csdn.net/20160920101943498) 通过修改表中的数据, 如截图红框可见, 李四的 age 已被修改.
(四)delete 语句
dalete 语句用于删除表中的行
sql delete 语法:
deletefrom 表名 where 列名 = 值;/* 删除符合 where 条件的行 */deletefrom 表名;/* 可以在不删除表的情况下删除所有行, 意味着表的结构, 属性和索引都是完整的, 直接删除表为 drop 表名 */
1
2
假如删除李四的信息, sql 语句如下所示:
deletefromPersonswherename=N'李四';/* 中文前加 N*/
1
查询的结果如下所示:
可以看到 Persons 表中, 李四的信息已经被删除.
来源: http://www.jianshu.com/p/7b478426da74