-- 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_asdesc
--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)
printgetdate()
-- 取得年
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_idVarchar(50) NOT NULL PRIMARY KEY,
user_nameVarchar(40),
add_timedatetime 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
selects.student_id,s.student_name,r.results
fromt_students s inner join t_result r
ons.student_id=r.student_id order by s.student_id,s.student_name,r.results
-- right()
selects.student_id,s.student_name,r.results
fromt_students s right join t_result r
ons.student_id=r.student_id order by s.student_id,s.student_name,r.results
-- 正常的
selects.student_id,s.student_name,r.results
fromt_studentss,t_result r
wheres.student_id=r.student_id order by s.student_id,s.student_name,r.results -- left()
selects.student_id,s.student_name,r.results
fromt_students s left join t_result r
ons.student_id=r.student_id order by s.student_id,s.student_name,r.results
--10
-- full outer()
selects.student_id,s.student_name,r.results
fromt_students s full outer join t_result r
ons.student_id=r.student_id order by s.student_id,s.student_name,r.results
-- cross
selects.student_id,s.student_name,r.results
fromt_students s cross join t_result r
order by s.student_id,s.student_name,r.results
--11 模糊查询like 的用法(必须加单引号)
select * from t_students
wherestudent_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_idbigint IDENTITY (1,1) NOT NULL PRIMARY KEY,
user_nameVarchar(40),
user_passwordvarchar(40),
user_true_namevarchar(40),
user_ageint,
user_gendervarchar(2),
user_addressvarchar(80),
user_telephonevarchar(20),
add_timedatetime 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)
printascii('a')
print unicode ('黄')
printnchar (40644)
print unicode ('剑')
printnchar (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(' dsfsdfds '))--去掉两边的空格
--7 替换
select replace ('abcdefghijkl','hi','hj')--把hi替换成hj
-- 不懂啊
declare @str char(100) --定义char型,字长为100
declare @i int
declare @zinchar
declare @jievarchar(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 ('入学时间','出生日期')
--从到求差
printdatediff (day,'2008-12-12',getdate())
printdatediff (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