MYSQLSQL排序语句.docx

上传人:b****3 文档编号:4070300 上传时间:2023-05-06 格式:DOCX 页数:20 大小:23.39KB
下载 相关 举报
MYSQLSQL排序语句.docx_第1页
第1页 / 共20页
MYSQLSQL排序语句.docx_第2页
第2页 / 共20页
MYSQLSQL排序语句.docx_第3页
第3页 / 共20页
MYSQLSQL排序语句.docx_第4页
第4页 / 共20页
MYSQLSQL排序语句.docx_第5页
第5页 / 共20页
MYSQLSQL排序语句.docx_第6页
第6页 / 共20页
MYSQLSQL排序语句.docx_第7页
第7页 / 共20页
MYSQLSQL排序语句.docx_第8页
第8页 / 共20页
MYSQLSQL排序语句.docx_第9页
第9页 / 共20页
MYSQLSQL排序语句.docx_第10页
第10页 / 共20页
MYSQLSQL排序语句.docx_第11页
第11页 / 共20页
MYSQLSQL排序语句.docx_第12页
第12页 / 共20页
MYSQLSQL排序语句.docx_第13页
第13页 / 共20页
MYSQLSQL排序语句.docx_第14页
第14页 / 共20页
MYSQLSQL排序语句.docx_第15页
第15页 / 共20页
MYSQLSQL排序语句.docx_第16页
第16页 / 共20页
MYSQLSQL排序语句.docx_第17页
第17页 / 共20页
MYSQLSQL排序语句.docx_第18页
第18页 / 共20页
MYSQLSQL排序语句.docx_第19页
第19页 / 共20页
MYSQLSQL排序语句.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MYSQLSQL排序语句.docx

《MYSQLSQL排序语句.docx》由会员分享,可在线阅读,更多相关《MYSQLSQL排序语句.docx(20页珍藏版)》请在冰点文库上搜索。

MYSQLSQL排序语句.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2