SQL语句
基础语句
selEct
*
FROM
dbo.Student
WHERE
Name=‘张a‘----大小写问题
字符串用单引号表示
关键字大小写不区分
注释用/* */,--
单等号判断
?
创建数据库,表
create
database
MySchool
on
(
--括号一定是圆括号
name=‘MySchool_data‘,--数据库名称
filename=‘d:\MySchool_data.mdf‘,--物理文件名
size=5mb,--初始大小,
maxsize=10mb,--最大大小
filegrowth=15%
--主文件增长率
)
log
on
(
name=‘MySchool_log‘,--日志文件名
filename=‘d:\MySchool_log.ldf‘,--日志物理文件名
maxsize=4mb,--最大大小
size=2mb,
filegrowth=1mb
)
go
创建数据表
CREATE
TABLE
Student
(
id
int
identity(1,1) primary
key,
NAME
NVARCHAR(16)
NOT
NULL,
age
INT
NOT
NULL
)
?
DELETE
FROM
Student
删除所有数据
TRUNCATE
TABLE
Student
清空表,重置表(把表重置会刚刚创建时候的状态,自增列,重新从1开始了)
以上两者效率有很大差别,如果用delete会产生很多的日志,truncate 就只会产生一行日志
DROP
TABLE
Student
直接删除表,不仅仅是数据,连表都不见了
?
?
增删查改
数据库运行流程:
增加语句
INSERT
INTO
dbo.Student
(name,gender,Address,Phone,Age,Birthday,CardId,CId)
VALUES
(‘王五‘,1,‘北京海淀,中关村‘,‘13888888888‘,20,‘2012-01/01‘,‘111111‘,2)
?
- 增加的时候。Bit字段要用 "0,1"表示true和false
- 时间字段用单引号包括,但是里面还是要遵循基本的时间格式‘2012-01-01‘
- INSERT 语句中列的数目要和 VALUES 后面的值的数目一样
- 不能为标识列插入数据(特殊情况下可以,SET IDENTITY_INSERT)
直接拖拽"列"就可以快速的插入列名
?
INSERT
INTO
dbo.Student
VALUES
(‘王五‘,1,‘北京海淀,中关村‘,‘13888888888‘,20,‘2012/01/01‘,‘111111‘,2)
除了表示列,其他所有字段的值,都要写出来,而且还要按照顺序写出来
?
INSERT
INTO
dbo.Student
(Name,Gender,Age,Birthday,CardId)VALUES(‘王五5‘,1,20,‘2012/01/01‘,‘111111‘)
可以只给指定的列插入数据,不能为null 的字段必须填,除非有默认值,默认值用default,不用打单引号
?
INSERT
INTO
dbo.Student
(Name,Gender)VALUES(‘钱七‘,0)
不能为phone插入null值
INSERT
INTO
dbo.Student
(Name,Gender,Phone)
VALUES
(N‘钱七①②βδΟου????íスヌフ叁叁‘,0,10000)
在插入特殊字符的时候,字符串前面需要加上大写的N
?
INSERT
INTO
dbo.Student
VALUES
(‘小明‘,default,N‘地址‘,default,20,‘2010-10-10‘,‘100000‘,2)
在插入数据的时候,可以显示的告诉数据库使用该字段的默认值
?
INSERT
INTO
dbo.Student
VALUES
(‘张‘‘四‘,DEFAULT,N‘地址‘,default,20,‘2010-10-10‘,‘100000‘,2)
插入的数据中有单引号的时候,需要输入两个单引号 "‘‘"
?
修改语句
UPDATE
dbo.Student
SET
Age=25
修改了student表中所有行的age值
UPDATE
dbo.Student
SET
Age=18 WHERE Name=‘陈珊‘
修改了student表中name是陈珊的age值
UPDATE
dbo.Student
SET
Age=19,gender=0 WHERE id=1
修改了student表中name是陈珊的age值和gender值
?
UPDATE
dbo.Student
SET
Phone=‘10010‘
WHERE
Name=‘钱七‘ AND Gender=0
Where后面可以有多个条件判断,多个条件中间用"空格and空格"隔开
?
UPDATE
dbo.Student
SET
Address=‘a‘
WHERE Name=‘王五‘ AND Gender=1 OR Name=‘王五6‘
--3
UPDATE
dbo.Student
SET
Address=‘c‘
WHERE
(Name=‘王五‘ OR Gender=1) AND Name=‘王五6‘
--4
在数据库执行的时候,and条件是优先于or条件执行的
UPDATE
dbo.Student
SET
age=age+1
UPDATE
dbo.Student
SET
age+=1
--2005 不支持
Set值的时候,可以取出原来的值
?
= < > != <>
UPDATE
dbo.Student
SET
Address =
‘未知‘
WHERE
Address
=
NULL--这个是不行滴
UPDATE
dbo.Student
SET
Address =
‘未知‘
WHERE
Address
IS
NULL
UPDATE
dbo.Student
SET
Address=‘北京‘
WHERE
Address IS
NOT
NULL
NULL 值的特殊判断
UPDATE
dbo.Student
SET
address =
‘男儿国‘
WHERE Gender!=0
不等于"!="
?
写法:update 表名 set 列名=值 , 列名=值 where 条件 条件中间用and和or连接 and优先于or执行
?
关于密码的大小写问题
?
约束
非空约束---就是不能为 null
主键约束(PK) primary key constraint---唯一(不重复的) 且 不为空
????唯一约束+非空位数
?
唯一约束 (UQ)unique constraint 唯一,允许为空(null),但只能出现一次
?
默认约束 (DF)default constraint 如果不给值,默认值
检查约束 (CK)check constraint 范围以及格式限制
在设计界面,字段上右键,有"check约束",点击之后
?
外键约束 (FK)foreign key constraint 表关系—主外键关系
????添加主外键关系,外键的值必须来自主键表
查询语句
SELECT
TOP 10 *
FROM
dbo.Student--取出前10条的所有数据
SELECT
TOP 10 Name,Gender,Age
FROM
dbo.Student--取出前10条的部分数据
?
SELECT
TOP 10 PERCENT
*
FROM
dbo.Student---取出前面10%的数据,所有小数,是进位的,21/10=2.1 3
--19/10 1.9 2
?
Distinct
去除重复行,但是是针对于查询之后的结果,来去除重复行,
它是判断结果数据中,整行数据,只要有一个列不相同,那么就不认为是相同数据
?
Top和distinct结合使用的话,distinct是先执行的,先去除重复项,然后在去除想要的条数
聚合函数
Count,取得满足条件的数据行的 行数
?
Where between and
BETWEEN and 在数据库内部是做过特殊优化的,执行效率比> and < 等这种方式快
SELECT
*
FROM
dbo.Student
WHERE
Age BETWEEN 25 AND 30 ---25的有,30也有
相当于Age>=25 AND Age<=30
?
小分页:
SELECT
*
FROM
dbo.Student
WHERE
id BETWEEN
(num-1)*5+1 AND
num*5
1:1-5
2:6-10
?
IN关键字
判断一个列的值是否在后面括号内,
?
SELECT
*
FROM
dbo.Student
WHERE
Gender IN
(‘男‘,‘女‘)--正确
SELECT
*
FROM
dbo.Student
WHERE
Gender IN
(0,1,2)--错误,两者数据的类型不同
?
模糊查询
使用系统已经定义好的匹配符,按照定义的规则匹配数据,如果能匹配就查出来
?
通配符,匹配符:_ % [] ^
_ 代表一个任意字符
% 代表零个或多个任意字符
[] 代表一个字符 的 取值区间
^ 配合[]使用,表示不是这个区间,
数据库不兼容的,sqlserver可以用,其他数据库要用not like
?
里面不区分大小写
效率很低
如果在匹配时,就要匹配这几个符号,那么需要把符号放在[]中,^不用,因为,它不放在[]中就默认是普通字符了
?
空值判断
SELECT
*
FROM
dbo.Student
WHERE
Address <>
NULL—错误
?
SELECT
*
FROM
dbo.Student
WHERE
Address
IS NULL—判断是为null 的
?
SELECT
*
FROM
dbo.Student
WHERE
Address IS
NOT
NULL—判断不是为null 的
?
SELECT
Name,ISNULL([Address],‘地球‘)
FROM
dbo.Student
Isnull可以判断后面是否为null,为null就用第二个参数代替
SELECT
Name,ISNULL(Age,20)
FROM dbo.Student
?
数据排序
?
ORDER
将当前查询出来的数据结果,进行排序,排序按照后面指定的列排序
SELECT
*
FROM
dbo.Student
ORDER
BY
Gender
DESC
DESC—倒序排序(降序),ASC—正序排序(升序)
9876543210 0123456789
汉字,用拼音的首字母排序,升序是从a-z,降序是从z-a
Order by 是放在where后面的
系统默认的是升序排序,关键字:ASC,如果想倒过来,关键字:DESC
如果是根据多个列排序,那么两个之间用逗号隔开
排序会先按照前面一个排序之后,再按照后面一个排序
?
Group by
最数据进行分组,分组之后的数据就是"分组信息",和原来的表里的信息就没有联系了
分组之后,可以取到分组根据,就是根据什么字段分组,就能取得字段的名字,
还能使用聚合函数
Having
对分组信息进行过滤,因为分组之后的信息和原来的表信息没有关系了
Having可以用的之后出现在group子句中的列,还有聚合函数
?
执行顺序
查询某张表,如果表里面有1000W数据,我们只查出100条数据
à再对着100条数据进行分组,可以筛选分组,
如果指定列,结果集就更小了,这里只有100条指定列的数据
取出前面几条,或者取出重复
?
最进行排序,排序就只需要对100条数据排序了
?
类型转换
Cast(待转换的值 as 想要转换成的类型)
CAST(1 AS
NVARCHAR(10))
?
联合结果集
连接两个结果集
- 两个集合必须具有相同的列数
- 列具有相同的数据类型(至少能隐式转换的)
- 最终输出的集合的列名由第一个集合的列名来确定
SELECT
Name,Age,Gender
FROM
dbo.Student--19
UNION
SELECT
Name
姓名,Age
年龄,Gender
性别
FROM
dbo.Student—19
Union默认会去除重复行
?
SELECT
Name,Age,Gender
FROM
dbo.Student--19
UNION All
SELECT
Name
姓名,Age
年龄,Gender
性别
FROM
dbo.Student—19
Union all 不会去除重复行
一般都是使用union all
批量插入
INSERT
INTO
dbo.Student
(Name, Pwd, Gender,
Address,
Phone, Age, Birthday, CardId, CId)
SELECT
Name, Pwd, Gender,
Address,
Phone, Age, Birthday, CardId, CId FROM dbo.Student
将一个结果集当成值插入数据库,结果集的列数量,类型,都要一样
Select
*
into
Score2
from
Score
where 1<>1
可以复制一张表的结构信息,没有主键
热门排行
今日推荐
-
元道经纬相机完整版
版本:v5.0.3
大小:17.58MB
日期:2024-10-02
-
老照片修复高清版
版本:v3.2.2
大小:22.5MB
日期:2024-10-02
-
Eight Eight免费版
版本:v1.3.0
大小:35.3MB
日期:2024-10-02
-
暴风影音免费看版
版本:v8.3.2.1
大小:38.46MB
日期:2024-10-02
-
金迹记账官方版
版本:v1.0.0
大小:18.1MB
日期:2024-10-02
-
趣闻刷刷红包版
版本:v1.0.1
大小:47.59MB
日期:2024-10-02
热门手游
-
植物大战僵尸随机版
版本:v2.0.88
大小:1017.19MB
日期:2024-10-02
-
农场乐翻天内测版
版本:v1.0.0
大小:38.96MB
日期:2024-10-02
-
我的口袋农场正式版
版本:v0.0.1
大小:78.77MB
日期:2024-10-02
-
饥饿的猫官方版
版本:v1.9.2
大小:34.92MB
日期:2024-10-02
-
莓莓兔破解版
版本:v1.0.1
大小:65.59MB
日期:2024-10-02
-
街头赛车3D内测版
版本:5.4.0
大小:82.90MB
日期:2024-10-02