MYSQLSQL排序语句.docx
- 文档编号:4070300
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:20
- 大小:23.39KB
MYSQLSQL排序语句.docx
《MYSQLSQL排序语句.docx》由会员分享,可在线阅读,更多相关《MYSQLSQL排序语句.docx(20页珍藏版)》请在冰点文库上搜索。
MYSQLSQL排序语句
mysql:
常用基本sql语句小结(转载)
sql分类:
ddl—数据定义语言(create,alter,drop,declare)
dml—数据操纵语言(select,delete,update,insert)
首先,简要介绍基础语句:
1、说明:
创建数据库
createdatabasedatabase-name
2、说明:
删除数据库
dropdatabasedbname
3、说明:
备份sqlserver
---创建备份数据的device
usemaster
execsp_addumpdevice?
disk?
?
testback?
?
c:
mssql7backupmynwind_1.dat?
---开始备份
backupdatabasepubstotestback
4、说明:
创建新表
createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)根据已有的表创建新表:
a:
createtabletab_newliketab_old(使用旧表创建新表)
b:
createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
5、说明:
删除新表:
droptabletabname
6、说明:
增加一个列:
altertabletabnameaddcolumncoltype
注:
列增加后将不能删除。
db2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:
添加主键:
altertabletabnameaddprimarykey(col)
说明:
删除主键:
altertabletabnamedropprimarykey(col)
8、说明:
创建索引:
create[unique]indexidxnameontabname(col….)
删除索引:
dropindexidxname
注:
索引是不可更改的,想更改必须删除重新建。
9、说明:
创建视图:
createviewviewnameasselectstatement
删除视图:
dropviewviewname
10、说明:
几个简单的基本的sql语句
选择:
select*fromtable1where范围
插入:
insertintotable1(field1,field2)values(value1,value2)
删除:
deletefromtable1where范围
更新:
updatetable1setfield1=value1where范围
查找:
select*fromtable1wherefield1like?
%value1%?
---like的语法很精妙,查资料!
排序:
select*fromtable1orderbyfield1,field2[desc]
总数:
selectcount*astotalcountfromtable1
求和:
selectsum(field1)assumvaluefromtable1
平均:
selectavg(field1)asavgvaluefromtable1
最大:
selectmax(field1)asmaxvaluefromtable1
最小:
selectmin(field1)asminvaluefromtable1
11、说明:
几个高级查询运算词
a:
union运算符
union运算符通过组合其他两个结果表(例如table1和table2)并消去表中任何重复行而派生出一个结果表。
当all随union一起使用时(即union
all),不消除重复行。
两种情况下,派生表的每一行不是来自table1就是来自table2。
b:
except运算符
except运算符通过包括所有在table1中但不在table2中的行并消除所有重复行而派生出一个结果表。
当all随except一起使用时(exceptall),不消除重复行。
c:
intersect运算符
intersect运算符通过只包括table1和table2中都有的行并消除所有重复行而派生出一个结果表。
当all随intersect一起使用时(intersectall),不消除重复行。
注:
使用运算词的几个查询结果行必须是一致的。
12、说明:
使用外连接
a、leftouterjoin:
左外连接(左连接):
结果集几包括连接表的匹配行,也包括左连接表的所有行。
sql:
selecta.a,a.b,a.c,b.c,b.d,b.ffromaleftoutjoinbona.a=b.cb:
rightouterjoin:
右外连接(右连接):
结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
c:
fullouterjoin:
全外连接:
不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
其次,大家来看一些不错的sql语句
1、说明:
复制表(只复制结构,源表名:
a新表名:
b)(access可用)
法一:
select*intobfromawhere1<>1
法二:
selecttop0*intobfroma
2、说明:
拷贝表(拷贝数据,源表名:
a目标表名:
b)(access可用)
insertintob(a,b,c)selectd,e,ffromb;
3、说明:
跨数据库之间表的拷贝(具体数据使用绝对路径)(access可用)
insertintob(a,b,c)selectd,e,ffrombin?
具体数据库?
where条件
例子:
..frombin?
&server.mappath(.)&data.mdb&?
where..
4、说明:
子查询(表名1:
a表名2:
b)
selecta,b,cfromawhereain(selectdfromb)或者:
selecta,b,cfromawhereain(1,2,3)
5、说明:
显示文(转载于:
mysqlsql排序语句)章、提交人和最后回复时间
selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b
6、说明:
外连接查询(表名1:
a表名2:
b)
selecta.a,a.b,a.c,b.c,b.d,b.ffromaleftoutjoinbona.a=b.c
7、说明:
在线视图查询(表名1:
a)
select*from(selecta,b,cfroma)twheret.a>1;
8、说明:
between的用法,between限制查询数据范围时包括了边界值,notbetween不包括
select*fromtable1wheretimebetweentime1andtime2
selecta,b,c,fromtable1whereanotbetween数值1and数值2
9、说明:
in的使用方法
select*fromtable1wherea[not]in(?
值1?
?
值2?
?
值4?
?
值6?
)
10、说明:
两张关联表,删除主表中已经在副表中没有的信息
deletefromtable1wherenotexists(select*fromtable2where
table1.field1=table2.field1)
11、说明:
四表联查问题:
select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....
12、说明:
日程安排提前五分钟提醒
sql:
select*from日程安排wheredatediff(?
minute?
f开始时间,getdate())>5
13、说明:
一条sql语句搞定数据库分页
selecttop10b.*from(selecttop20主键字段,排序字段from表名orderby排序字段desc)a,表名bwhereb.主键字段=a.主键字段orderbya.排序字段
14、说明:
前10条记录
selecttop10*formtable1where范围
15、说明:
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
selecta,b,cfromtablenametawherea=(selectmax(a)fromtablenametbwheretb.b=ta.b)
16、说明:
包括所有在tablea中但不在tableb和tablec中的行并消除所有重复行而派生出一个结果表
(selectafromtablea)except(selectafromtableb)except(selectafromtablec)
17、说明:
随机取出10条数据
selecttop10*fromtablenameorderbynewid()
18、说明:
随机选择记录
selectnewid()
19、说明:
删除重复记录
deletefromtablenamewhereidnotin(selectmax(id)fromtablenamegroupbycol1,col2,...)
20、说明:
列出数据库里所有的表名
selectnamefromsysobjectswheretype=?
u?
21、说明:
列出表里的所有的
selectnamefromsyscolumnswhereid=object_id(?
tablename?
)
22、说明:
列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case。
selecttype,sum(casevenderwhen?
a?
thenpcselse0end),sum(casevenderwhen?
c?
thenpcselse0end),sum(casevenderwhen?
b?
thenpcselse0end)fromtablenamegroupbytype
显示结果:
typevenderpcs
电脑a1
电脑a1篇二:
mysqlsql语句练习
mysqlsql语句练习:
1.建库建表
--createtables
--部门表
createtabledept
(deptnoint(3)primarykey,
dnamevarchar(14),
locvarchar(13));
--雇员表
createtableemp
(
empnoint(4)notnullprimarykey,
enamevarchar(10),
jobvarchar(10),
mgrint(4),
hiredatedatetime,
saldouble,
deptnoint(3),
foreignkey(deptno)referencesdept(deptno)
);
--工资级别表
createtablesalgrade
(
gradeint(3)primarykey,
losalint(3),
hisalint(3)
);
----------------------------------------------------------------------------------------------------------------------------------------
2.插入数据(进行初始化)
--往部门表中查数据
insertintodeptvalues(10,accounting,newyork);
insertintodeptvalues(20,research,dallas);
insertintodeptvalues(30,sales,chicago);
insertintodeptvalues(40,operations,boston);
insertintodeptvalues(50,admin,washing);
--往雇员表中插数据
insertintoempvalues(7369,smith,clerk,7902,1980-12-17,800,0,20);
insertintoempvalues(7499,allen,salesman,7698,1981-2-20,1600,300,30);
insertintoempvalues(7844,turner,salesman,7499,1981-9-8,1500,0,30);insertintoempvalues(7698,tom,manager,0,1981-9-8,6100,600,40);insertintoempvalues(7876,adams,clerk,7900,1987-5-23,1100,0,20);insertintoempvalues(7900,james,clerk,7698,1981-12-3,2400,0,30);insertintoempvalues(7902,ford,analyst,7698,1981-12-3,3000,null,20);insertintoempvalues(7901,kik,clerk,7900,1981-12-3,1900,0,30);--往工资级别表中插数据
insertintosalgradevalues(1,700,1200);
insertintosalgradevalues(2,1201,1400);
insertintosalgradevalues(3,1401,2000);
insertintosalgradevalues(4,2001,3000);
insertintosalgradevalues(5,3001,5000);
insertintosalgradevalues(6,5001,10000);
------------------------------------------------------------------------------------------------------------------------------------
3.必会的5个组函数:
max,min,avg,sum,count要牢牢记住
-----------------------------------------------------------------------------------------------------------------------------------
4.练习:
①查询雇员表中工资最高的雇员的员工号、员工姓名、工资和部门号。
selectempno,ename,sal,deptnofromemp
wheresal=(selectmax(sal)fromemp);
②单条查询语句综合练习题:
薪水大于1200的雇员,按照部门编号进行分组,分组后的平均薪水必须大于1500,查询各分组的平均工资,按照工资的倒序进行排列。
selectavg(sal)avg_sal,deptno
fromemp
wheresal>1200
groupbydeptno
havingavg_sal>1500
orderbyavg_saldesc;
说明:
此句基本上包含了sql语句的子语句和排列顺序:
select(要查询的字段)->from(从哪一张或哪几张表或视图)->where(过滤条件)->groupby(having)(分组及条件)->orderby(按哪个或哪几个字段进行升序或降序排列)。
注意:
sqlserver4.1中可能不支持在order语句中使用组函数avg,报错说:
invaliduseofgroupfunction(错误提示和现象有点对不上)
解决办法:
给avg(sal)起个别名avg_sal,这样在order语句中就直接使用这个别名③等值连接:
查询每个雇员和其所在的部门名
selectename,dnamefromemp,deptwhere(emp.deptno=dept.deptno);或者(推荐)(on中就写连接条件,where中就写过滤条件,各司其职)
selectename,dnamefromempjoindepton(emp.deptno=dept.deptno);④非等值连接:
查询每个雇员姓名及其工资所在的等级
selectename,gradefromempejoinsalgradeson(e.salbetweens.losalands.hisal);
⑤查询雇员名第2个字母不是a的雇员的姓名、所在的组名、工资所在的等级。
三张表的连接查询(先连接,再加上where语句进行过滤)
selectename,dname,grade
fromempejoindeptdon(e.deptno=d.deptno)
joinsalgradeson(e.salbetweens.losalands.hisal)
whereenamenotlike_a%;
⑥查询每个雇员和其经理的姓名
自连接:
(事实上只有一张表,但把它当成两张表来用,使用别名来进行区分)
selecte1.ename,e2.enamefromempe1,empe2where(e1.mgr=e2.empno);或者:
(推荐用join语句)
selecte1.ename,e2.enamefromempe1joinempe2on(e1.mgr=e2.empno);⑦查询每个雇员和其经理的姓名(包括公司老板本身(他上面没有经理))
左外连接(会把左表中不符合连接条件的记录也显示出来):
selecte1.ename,e2.enamefromempe1leftjoinempe2on(e1.mgr=e2.empno);
⑧查询每个雇员的姓名及其所在部门的部门名(包括没有雇员的部门)
右外连接(会把右表中不符合连接条件的记录也显示出来):
selectename,dnamefromemperightjoindeptdon(e.deptno=d.deptno);⑨子查询1:
查询每个部门中工资最高的人的姓名、薪水和部门编号
先求出每个部门中的最高工资:
selectmax(sal)max_sal,deptnofromempgroupbydeptno
在使用连接查询:
selectename,sal,e.deptno
fromempejoin
(selectmax(sal)max_sal,deptnofromempgroupbydeptno)t
on(e.sal=t.max_salande.deptno=t.deptno);
⑩子查询2:
查询每个部门平均工资所在的等级
selectdeptno,avg_sal,gradefromsalgrade
join(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
on(t.avg_salbetweensalgrade.losalandsalgrade.hisal);
或者:
selectdeptno,avg_sal,gradefrom
(selectdeptno,avg(sal)avg_salfromempgroupbydeptno)t
joinsalgradeson(t.avg_salbetweens.losalands.hisal);
?
子查询3:
查询每个部门内平均的薪水等级
先求每个人的薪水等级
selectename,deptno,gradefromempjoinsalgrades
on(emp.salbetweens.losalands.hisal);
再按组进行分组求平均
selectdeptno,avg(grade)from
(selectename,deptno,gradefromempjoinsalgrades
on(emp.salbetweens.losalands.hisal))t
groupbydeptno;
?
子查询4:
查询雇员中有哪些人是经理人:
selectenamefromempwhereempnoin(selectdistinctmgrfromemp);或者:
selectenamefromempjoin
(selectdistinctmgrfromemp)t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MYSQLSQL 排序 语句