–       distinct取唯一

 

–0    查询某一个数据库中所有表的名字

select name from sysobjects where xtype=’U’ and status <>0

 

–1.   按id升序排列

select * from 学生 xs order by xs.学生_ID desc

select * from 学生 as xs order by xs.学生_ID desc

–       查询教师按笔画排序

select * from 教师

order by 教师名 collate chinese_prc_stroke_ci_as desc

 

–2.   只显示前10到20个(top的应用)

select top 10 * from 学生

where 学生_ID not in

(

         select top 10 学生_ID from 学生

)

 

–2.2 查询的id为自增的

select top 10 * from 学生

where 学生_ID>(

select max(学生_ID)

from (select top 30 学生_ID from 学生 order by 学生_ID )as 学生)

 

–2.2.1      MySQL版的分页查询

SELECT * FROM tb_alertmsg limit 30,10  –30是指从第多少条查起,10是指查询条数

 

–2.3 每个系的男女生人数

select  x.系名,count(case when xb.性别名=’男’ then xb.性别名 end) as 男生人数,

                   count(case when xb.性别名=’女’ then xb.性别名 end) as 女生人数

from  dbo.学生 xs,dbo.系 x,dbo.代码_性别 xb

where xs.系_ID=x.系_ID and xs.性别_ID=xb.性别_ID

group by x.系名

 

–3    修改(还有时间)

update 学生 set 姓名=’李孝利’ where 学生_ID=1

update 学生 set 姓名=’李孝利’,出生日期=’2005-03-05 12:14:52.467′,

性别_ID=1,籍贯_ID=1,系_ID=1,届=2005,班级=1,入学时间=convert(varchar(12),year(getdate()) )

+’-“+convert(varchar(12),month(getdate()) )+’-“+convert(varchar(12),day(getdate()) ),

密码=’123456′ where 学生_ID=1

–       取得月、日、年、时间(am/pm)

print getdate()

–       取得年

print year(getdate() )

–       取得月

print month(getdate() )

–       取得日

print day(getdate() )

–       取得月、日、年、时间(am/pm),但不知道convert怎么解释(好像是连接字符串)

print convert(varchar(12),year(getdate()) )

+’-“+convert(varchar(12),month(getdate()) )

+’-“+convert(varchar(12),day(getdate()) )

–       hour、day、month、year要取得的小时、天数、月数、年数,第一个时间是被减的时间,

–       第二个是减的时间(下面的语句结果是3)

print DATEDIFF(year,’2006-6-6 12:59:59′,’2009-6-7 0:0:0′)

 

 

–4    创建一个表,把另一个表中的元素加入到新表中

select 学生_ID as id,姓名 as name into hj from 学生

 

–5    查询学生的姓名、性别、各科的平均成绩,按成绩的的升序排列

–       (作对比的)

–select xs.姓名,xs.性别_ID,xsxk.成绩,kc.课程名

–from 学生 xs,学生选课 xsxk,开课 kk,课程 kc

–where xs.学生_ID=xsxk.学生_ID and xsxk.开课_ID=kk.开课_ID

–and kk.课程_ID=kc.课程_ID

 

select xs.姓名,dx.性别名,avg(xsxk.成绩) 平均成绩

from 学生 xs,学生选课 xsxk,开课 kk,课程 kc,代码_性别 dx

where xs.学生_ID=xsxk.学生_ID and xsxk.开课_ID=kk.开课_ID

and kk.课程_ID=kc.课程_ID and xs.性别_ID=dx.性别_ID

group by xs.姓名,dx.性别名 order by avg(xsxk.成绩)

 

–6    向表中插入数据(newid() 随机产生id)

insert into 学生  (姓名,性别_ID)  values(‘hj’,1)

insert into t_students  (student_id,student_name,student_gender)  values(1014,’hj’,0)

–       建表时时间默认为getdate();【Sqlserver版本】

Create Table userhjTable(

         user_id Varchar(50) NOT NULL PRIMARY KEY,

         user_name Varchar(40),

         add_time datetime default (getdate())

)

–       建表时时间默认为getdate();【MySq版本】

Create Table userhjTable(

         `user_id ` int(3) unsigned NOT NULL AUTO_INCREMENT,      

         `user_name ` varchar(50) NOT NULL,     

         `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

)

 

select * from userhjTable

insert into userhjTable  (user_id,user_name)  values(newid(),’hj’)

 

–7    查询学生个数(count的用法)

select id个数=count(student_id) from t_students

 

–8    union all 的应用(两个sql语句查询的元素必须相同才可以用)

select xs.学生_ID,xs.姓名,dx.性别名,kc.课程名,xsxk.成绩

from 学生 xs,课程 kc,学生选课 xsxk,开课 kk,代码_性别 dx

where xs.学生_ID=xsxk.学生_ID and xsxk.开课_ID=kk.开课_ID

and kk.课程_ID=kc.课程_ID and dx.性别_ID=2

union all

select xs.学生_ID,xs.姓名,dx.性别名,kc.课程名,xsxk.成绩

from 学生 xs,课程 kc,学生选课 xsxk,开课 kk,代码_性别 dx

where xs.学生_ID=xsxk.学生_ID and xsxk.开课_ID=kk.开课_ID

and kk.课程_ID=kc.课程_ID and dx.性别_ID=1

 

–9    这几种的方法的联系与区别等等(忘了)

–       inner()

select xs.学生_ID,xs.姓名,xs.性别_ID

from 学生 xs inner join 学生选课 xsxk

on xs.学生_ID=xsxk.学生_ID order by xs.学生_ID

 

select * from t_result

 

select s.student_id,s.student_name,r.results

from t_students s inner join t_result r

on s.student_id=r.student_id order by s.student_id,s.student_name,r.results

–       right()

select s.student_id,s.student_name,r.results

from t_students s right join t_result r

on s.student_id=r.student_id order by s.student_id,s.student_name,r.results

–       正常的

select s.student_id,s.student_name,r.results

from t_students s,t_result r

where s.student_id=r.student_id order by s.student_id,s.student_name,r.results

–       left()

select s.student_id,s.student_name,r.results

from t_students s left join t_result r

on s.student_id=r.student_id order by s.student_id,s.student_name,r.results

–10

–       full outer()

select s.student_id,s.student_name,r.results

from t_students s full outer join t_result r

on s.student_id=r.student_id order by s.student_id,s.student_name,r.results

–       cross

select s.student_id,s.student_name,r.results

from t_students s cross join t_result r

order by s.student_id,s.student_name,r.results

 

–11  模糊查询 like 的用法(必须加单引号)

select * from t_students

where student_id like ‘%100%’

 

–12  删除表中数据

delete from 学生 where 学生_ID=61

 

–12.2        清除表中所有数据

truncate table hj

–       删除表中所有数据

delete from hj

 

–13  删除表

drop table hj

 

–14  创建表

Create Table userTable(

         user_id bigint IDENTITY (1,1) NOT NULL PRIMARY KEY,

         user_name Varchar(40),

         user_password varchar(40),

         user_true_name varchar(40),

         user_age int,

         user_gender varchar(2),

         user_address varchar(80),

         user_telephone varchar(20),

         add_time datetime default (getdate())

)

 

–15  这种写sql的方式 。。。in ()或者。。。not in ()

–查询教过布莱尼的老师的所有信息

select distinct js.教师名

from 教师 js,学生 xs,学生选课 xsxk,开课 kk,教师认课 jsrk

where xs.姓名=’布兰妮’ and xs.学生_ID=xsxk.学生_ID

and xsxk.开课_ID=kk.开课_ID and kk.开课_ID=jsrk.开课_ID

and jsrk.教师_ID=js.教师_ID

 

select * from 教师 js where js.教师_ID in

(

         select 教师_ID from 教师认课 jsrk where jsrk.开课_ID in

         (

                   select 开课_ID from 学生选课 xsxk where xsxk.学生_ID in

                   (

                            select 学生_ID from 学生 xs where xs.姓名=’布兰妮’

                   )

         )

)

 

 

–select id,name,(name + addname) as kk

from test4 t

where (name + addname)=’sdfSDF4564564578′

 

–1    ASCII  码 字符 变换

–select ascII(‘A’) ascii码值 显示上面的下面的就不显示了

print char(65)

print ascii(‘a’)

print unicode (‘黄’)

print nchar (40644)

print unicode (‘剑’)

print nchar (21073)

 

 

–2    取局部

print left (‘abcdefghigklmnopq’,4)

print right(‘abcdefghijklmnopqrstuvwxyz’,3)

print substring (‘abcdefghigklmnopq’,2,6)

 

–3    字母的形式 变换

print lower (‘aBCDefGHIJ’)

print upper(‘aBCDefGHIJ’)

 

–4    查找(patindex 不是很懂)

print charindex(‘hj’,”我是我abcdefghjklmnopqrstuvwxyz’,6)–显示查到的hj的h是第几位,没有查到显示0

print patindex(‘%f%u%’,”你是你wonderful’)–第一个要查的是第多少位

 

–5    加密(没接触过)

select char(ascii(‘a’)+2)

print space (10-len(‘abcd’))+’ab’–前面有6个空格

select space (10-len(‘abc’))+’abcd’–前面有7个空格

 

–6    取空格

select ltrim (‘  abc   ‘) –去掉左面的空格

select rtrim (‘         a  s  d              ‘)–去掉右面的空格

select ltrim(rtrim(‘        dsfs          dfds        ‘))–去掉两边的空格

 

–7    替换

select replace (‘abcdefghijkl’,”hi’,”hj’)–把hi替换成hj

 

–       不懂啊

declare @str char(100)   –定义char型,字长为100

declare @i int

declare @zi nchar

declare @jie varchar(1000)

set @str=’我是世界上最好的人了’        –赋值

set @jie=”

set @i=1

while(@i<=10)

begin

         set @zi = substring (@str,@i,1)

         set @jie =@jie + convert(char(5),unicode(@zi))

         set @i = @i+1

print @jie

end

 

–isnull       把表中属性列为空的字段改为什么,例如下面的把出生日期为空的都改为2008-10-10

select  姓名,isnull (出生日期,’2008-10-10′) from 学生

–没弄明白

select nullif (‘入学时间’,”出生日期’)      

 

–从  到  求差

print datediff (day,’2008-12-12′,getdate())

print datediff (hour,’2008-12-12 12:00AM’,getdate())

–加天 月

print dateadd(day,+23,’2008-12-30′)–月、日、年、时间

print dateadd(month,+2,’2008-12-12′)–月、日、年、时间

–取时间

print year(getdate())

print month(getdate())

print day(getdate())

 

–8

sql语句整理

发表评论

电子邮件地址不会被公开。 必填项已用*标注