SQL 基础
数据库简介:
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
数据库常见产品
SQLServer数据库
美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
其主要特点如下:
(1)高性能设计,可充分利用WindowsNT的优势。
(2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。
(3)强壮的事务处理功能,采用各种方法保证数据的完整性。
(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。 SQLServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。
安装SQLServer
启用SA用户远程登录
设置密码
开启SA用户。
点击属性,启用远程连接。
重启服务,使其生效。
命令:services.msc
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING
1433端口是开启的。当我们关闭服务后,端口也将关闭。
数据库语言
数据查询语言DQL
DQL:(Data Query Language) SELECT 数据查询语言
数据操纵语言DML
如insert,delete,update,select(插入、删除、修改、检索)
数据定义语言DDL
如drop,alter,truncate等都是DDL
数据控制语言DCL
DCL(Data Control Language)是数据库控制语言。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
创建第一个数据库
新建数据库
限制增长:
数据库的文件后缀
ydxx.mdf
日志文件后缀
ydxx _log.ldf
数据类型
第一大类:整数数据
bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte.
int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1.
smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1
tinyint: 是最小的整数类型,仅用1字节,范围:0至此^8-1
第二大类:精确数值数据
numeric:表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化.
decimal:和numeric差不多
第三大类:近似浮点数值数据
float:用8个字节来存储数据.最多可为53位.范围为:-1.79E+308至1.79E+308.
real:位数为24,用4个字节,数字范围:-3.04E+38至3.04E+38
第四大类:日期时间数据
datatime:表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节.
smalldatetime:表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节.
第五大类:字符串数据
char:长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上.
varchar:长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉.
text:长宽也是设定的,最长可以存放2G的数据.
第六大类:Unincode字符串数据
nchar:长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节.
nvarchar:长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节.
ntext:长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.
第七大类:货币数据类型
money:记录金额范围为:-92233720368577.5808至92233720368577.5807.需要8 个字节.
smallmoney:记录金额范围为:-214748.3648至214748.36487.需要4个字节.
第八大类:标记数据
timestamp:该数据类型在每一个表中是唯一的!当表中的一个记录更改时,该记录的timestamp字段会自动更新.
uniqueidentifier:用于识别数据库里面许多个表的唯一一个记录.
第九大类:二进制码字符串数据
binary:固定长度的二进制码字符串字段,最短为1,最长为8000.
varbinary:与binary差异为数据尾部是00时,varbinary会将其去掉
image:为可变长度的二进制码字符串,最长2G.
主键
在相续建立数据库
分离数据库表,表名:bj(班级的意思)
完善表单
基础查询
SQL 注释(不执行)
第一种:单行
select * from bj --select * from bj |
第二种:多行
select * from bj /*select * from bj*/ |
查询所有:
Select * from 表名
select * from bj |
查询指定列
select 列名,列名 from 表名
select name,sex,age from bj |
条件查询 where字句
SELECT 列名 FROM 表名 where 条件
select*from bj where name=\'羊大仙\' |
查年龄大于10岁的所有记录
select * from bj where age>10 |
查询所有人的数量(count 聚合函数)
select COUNT(*) from bj |
范围查询(between)
select*from bj where id between 2 and 8 |
查询所有不等于23岁的记录
select * from bj where age<> 23 |
模糊查询(like)
1,百分号代表所有,但不包括空
select * from bj where address like\'%\' |
2,匹配中间
select*from bj where phone like \'%22%\' |
3.查询姓名中包含姓羊的
select * from bj where name like\'%羊%\' |
4,查询电话号码中包含“9 ”的
select * from bj where phone like\'%9%\' |
,5匹配开头(匹配电话号码前包含“1”的)
select*from bj where phone like \'1%\' |
6.匹配结尾(匹配电话号码后结尾包含“4”的)
select*from bj where phone like \'%4\' |
7,匹配开头和结尾(开头为“1”,结尾为“4”的)
select*from bj where phone like \'1%4\' |
8,匹配单个字符(匹配一个后面为33的一个数)。
select*from bj where phone like \'_33%\' |
9,匹配多个字符
select*from bj where phone like \'_[a-z-1-9]7%\' |
1
10,不匹配
select*from bj where phone like \'_![8][!7]%\' |
查询NULL
1,查询非null
select*from bj where phone is not null |
2.查询null值
select*from bj where address is null |
逻辑查询
1,AND查询
SELECT*FROM bj where name=\'羊大仙\' and sex=\'男\' |
2,OR查询
SELECT*FROM bj where name=\'羊大仙\' or sex=\'女\' |
3,OR进行查询
select * from bj where id=5 or id=7 or id=1 |
3,IN查询
select * from bj where id=5 or id=7 or id in(1,3,5,7) |
4,NOT IN 查询
select * from bj where id not in(1,3,5,7) |
TOP字句
1,查询前两行
SELECT TOP 3 * FROM BJ |
2附加语句
2.1:查询前三行ID大于6 且ID不等于7不等于8的值
SELECT TOP 3 * FROM BJ where id>6 and id<>7 and id<>8 |
2.2:查询前三行ID大于6 且ID不等于7不等于8的值(优化版)
SELECT TOP 3 * FROM BJ where id>6 and id not in(7,8) |
ORDER BY 语句
顺序语句
1,ACS(默认、正序)
SELECT * FROM BJ order by id ASC select * from bj order by age,id |
2,DESC(倒叙)
SELECT * FROM BJ order by id DESC |
3,按照年龄从小到大查询
select * from bj order by age asc |
4,按照年龄从大到小查询
select * from bj order by age desc |
5.1,查询表的列(正确)
select * from bj order by 7 select * from bj order by 1,2,3,4,5,6,7 |
5.2,查询表的列(错误)只有7列
select * from bj order by 8 select * from bj order by 1,2,3,4,5,6,7,8 |
DISTINCT 去除重复数据
select distinct age from bj order by 1 |
数据库关系图
在数据库中,选择数据库关系图,右键 ,新建数据库关系图。然后进行选表
插入语句(INSERT INTO)
INSERT INTO bj (列1, 列2,...) VALUES (值1, 值2,....)
第一种:完整写法
insert into bj (id,name,sex,age,greadname,phone,address) values(\'14\',\'阿花\',\'女\',\'20\',\'九年级\',\'1878664624834\',\'重庆市南岸区南坪协信城\') |
第二种:简单写法
(写法如下,但是id要是自动增长的情况是使用有效,id不是自动增长的话不能执行,本人id不是自动增长,所有无法执行,仅供参考参考)
insert into student values (\'小芳\',\'女\',\'18\',\'初中\',\'137694743\',\'北京市昌平区回龙观\'); |
更改列名显示名称(加as)
select COUNT(name) as\'姓名\' from bj where name=\'羊大仙\' |
删除语句(DELETE 语句)
delete from bj where id=16 |
通过模糊查询删除姓胖的
delete from bj where name like \'胖%\' |
语句执行前
语句执行后
修改语句(UPDATE)
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
将name为‘羊大仙’的修改为‘胖子’
update bj set name=\'胖子\' where name=\'羊大仙\' |
执行语句前
执行语句后
or
把胖妹的的地址改成\'羊大仙的家里\'
update bj set address=\'羊大仙的家里\' where name=\'胖妹\' |
语句执行前
语句执行后
把性别为男的年级全部改成学前班
update bj set sex=\'男\' where greadname=\'学前班\' |
执行语句前
执行语句后
主外键
首先建立好两个数据库
第一个
第二个
开始建立主外键
在右键数据库关系图》新建数据库关系图》选自己建立的哪啊两个表》添加》在自命名保存
查看数据库:yyyyy
查看数据库:ydxx
在数据库yyyyy中添加数据
查看(应该之前添加过数据有删除,所以这里的id从24开始增长的)
开始在ydxx表中插入外键关联
插入成功
查看
插入没有的id值
执行命令
结束。。。。。
更改列查询
select id as \'学好\',name as \'姓名\', age as \'年龄\',sex as \'性别\',gradeid as \'年龄\',address as \'地址\',phone as \'电话\' from ydxx |
两表联查
第 一种:两表联查
select ydxx.id as \'学号\',name as \'姓名\', age as \'年龄\',\'年龄\',address as \'地址\',phone as \'联系方式\',yyyyy.gradename as \'班级\' from ydxx , yyyyy |
子查询
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。在此示例中,子查询用作 SELECT 语句中名为 MaxUnitPrice 的列表达式。
select ydxx.id as \'学号\',name as \'姓名\', age as \'年龄\',sex as \'性别\', address as \'地址\',phone as \'联系方式\', (select gradename from yyyyy where yyyyy.id=ydxx.gradeid) from ydxx |
查询阿宗在那个班级
select yyyyy.gradename from yyyyy where id = (select gradeid from ydxx where name = \'阿宗\') |
查询二年级的所有学生
select name,age,sex,gradeid from ydxx where ydxx.gradeid=(select id from yyyyy where gradename=\'二年级\') |
查询二年级的所有学生
select ydxx.name,ydxx.sex, ydxx.age from ydxx where ydxx.gradeid =(select id from yyyyy where gradename like \'二年级\') |
嵌套子查询
select name,sex,(select (select 1+5)+2) as \'分数\' from ydxx |
SQL 高级
SQL Top
SQL Like
SQL In
SQL Join
SQL Inner Join
SQL Union
SQL 函数
聚合函数
聚合对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用
聚合函数在什么地方才能使用
1、SELECT 语句的选择列表(子查询或外部查询)。
2、COMPUTE 或 COMPUTE BY 子句。
3、HAVING 子句
常用函数
SQL avg(平均)
SQL count(总数)
SQL first()
SQL last()
SQL max(最大)
SQL min(最小)
SQL sum(综合)
SQL Group By
SQL Having
SQL ucase()
SQL lcase()
SQL mid()
SQL len()
SQL round()
SQL now()
SQL format()
1、COUNT函数
1.1、查询所有班级总数,所有班级学生
select count(*) as \'学生总数\' from ydxx select COUNT(*) as \'班级总数\'from yyyyy |
2、MAX函数
2.1、查询班级里最大的年龄
SELECT MAX(ydxx.age)as \'最大年龄\' from ydxx |
3、MIN函数
3.1 查询班级里最小的年龄
SELECT MIN(ydxx.AGE)AS \'最小年龄\' FROM YDXX |
3.2、同时查询最大的年龄和最小的年龄
select MAX(ydxx.age) as \'最大年龄\',MIN(ydxx.age) as \'最小年龄\' from ydxx |
4、AVG函数
4.1、查询平均年年
select AVG(ydxx.age) as \'平均年龄\' from ydxx |
4.2、查询大于平均年年龄的学员
select name,age,sex,gradeid from ydxx where ydxx.age>(select AVG(ydxx.age) as \'平均年龄\' from ydxx) |
5、SUM函数
5.1、查询所有学员年龄的总和
select sum(ydxx.age) as \'所有学员年龄的总和\' from ydxx |
后带更新。。。。