SQL基础用法

SQL语句

基础语句

selEct * FROM dbo.Student WHERE Name='张a'----大小写问题

字符串用单引号表示

关键字大小写不区分

注释用/*  */,--

单等号判断

 

创建数据库,表

create databaseMySchool

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 TABLEStudent

(

id intidentity(1,1) primary key,

NAME NVARCHAR(16) NOT NULL,

age INTNOT NULL

)

 

DELETE FROM Student

删除所有数据

TRUNCATE TABLE Student

清空表,重置表(把表重置会刚刚创建时候的状态,自增列,重新从1开始了)

以上两者效率有很大差别,如果用delete会产生很多的日志,truncate 就只会产生一行日志

DROP TABLE Student

直接删除表,不仅仅是数据,连表都不见了

 

 

增删查改

增加语句 

INSERT INTOdbo.Student

(name,gender,Address,Phone,Age,Birthday,CardId,CId)

VALUES

('王五',1,'南','2012-01/01','111111',2)

 


1. 时间字段用单引号包括,但是里面还是要遵循基本的时间格式'2012-01-01'

2.  INSERT 语句中列的数目要和 VALUES 后面的值的数目一样

3.  不能为标识列插入数据(特殊情况下可以,SET IDENTITY_INSERT)

直接拖拽“列”就可以快速的插入列名

 

INSERT INTOdbo.Student

VALUES

('王五',1,'北京海淀,中关村','13888888888',20,'2012/01/01','111111',2)

除了表示列,其他所有字段的值,都要写出来,而且还要按照顺序写出来

 

INSERT INTOdbo.Student

(Name,Gender,Age,Birthday,CardId)VALUES('王五5',1,20,'2012/01/01','111111')

可以只给指定的列插入数据,不能为null 的字段必须填,除非有默认值,默认值用default,不用打单引号

 

INSERT INTOdbo.Student(Name,Gender)VALUES('钱七',0)

不能为phone插入null值

INSERT INTOdbo.Student(Name,Gender,Phone)

VALUES

(N'钱七①②βδΟουÇÄãÏíスヌフ叁叁',0,10000)

在插入特殊字符的时候,字符串前面需要加上大写的N

 

INSERT INTOdbo.Student

VALUES

('小明',default,N'地址',default,20,'2010-10-10','100000',2)

在插入数据的时候,可以显示的告诉数据库使用该字段的默认值

 

INSERT INTOdbo.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=WHERE id=1

修改了student表中name是陈珊的age值和gender值

 

UPDATE dbo.Student SET Phone='10010' WHERE Name='钱七' ANDGender=0

Where后面可以有多个条件判断,多个条件中间用“空格and空格”隔开

 

UPDATE dbo.Student SET Address='a' WHERE Name='王五' ANDGender=OR Name='王五6'

--3

UPDATE dbo.Student SET Address='c' WHERE (Name='王五' ORGender=1) AND Name='王五6'

--4

在数据库执行的时候,and条件是优先于or条件执行的

 

UPDATE dbo.Student SET age=age+1

UPDATE dbo.Student SET age+=--2005 不支持

Set值的时候,可以取出原来的值

 

= < > != <>

UPDATE dbo.Student SET Address = '未知' WHERE Address= NULL--这个是不行滴

UPDATE dbo.Student SET Address = '未知' WHERE AddressIS NULL

UPDATE dbo.Student SET Address='北京' WHERE AddressIS 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

去除重复行,但是是正对于查询之后的结果,来去除重复行,

它是判断结果数据中,整行数据,只要有一个列不相同,那么就不认为是相同数据

 

Topdistinct结合使用的话,distinct是先执行的,先去除重复项,然后在去除想要的条数

 

聚合函数

Count,取得满足条件的数据行的 行数

 

Where

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+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可以用,其他数据库要用notlike

 

里面不区分大小写

效率很低

如果在匹配时,就要匹配这几个符号,那么需要把符号放在[]中,^不用,因为,它不放在[]中就默认是普通字符了

 

空值判断

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],'地球') FROMdbo.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(ASNVARCHAR(10))

 

联合结果集

连接两个结果集

1.      两个集合必须具有相同的列数

2.      列具有相同的数据类型(至少能隐式转换的)

3.      最终输出的集合的列名由第一个集合的列名来确定

SELECT Name,Age,Gender FROM dbo.Student--19

UNION

SELECT Name姓名,Age 年龄,Gender 性别 FROM dbo.Student19

Union默认会去除重复行

 

SELECT Name,Age,Gender FROM dbo.Student--19

UNION All

SELECT Name姓名,Age 年龄,Gender 性别 FROM dbo.Student19

Union all 不会去除重复行

一般都是使用union all

批量插入

INSERT INTOdbo.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

可以复制一张表的结构信息,没有主键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值