MySQl数据库必知必会sql语句(加强版)
这一篇属于加强版,问题和sql语句如下。
创建users表,设置id,name,gender,sal字段,其中id为主键
droptableifexistsusers; createtableifnotexistsusers( idint(5)primarykeyauto_increment, namevarchar(10)uniquenotnull, gendervarchar(1)notnull, salint(5)notnull ); insertintousers(name,gender,sal)values('AA','男',1000); insertintousers(name,gender,sal)values('BB','女',1200);
--------------------------------------------------------------------------------------
一对一:AA的身份号是多少
droptableifexistsusers; createtableifnotexistsusers( idint(5)primarykeyauto_increment, namevarchar(10)uniquenotnull, gendervarchar(1)notnull, salint(5)notnull ); insertintousers(name,gender,sal)values('AA','男',1000); insertintousers(name,gender,sal)values('BB','女',1200); droptableifexistscards; createtableifnotexistscards( idint(5)primarykeyauto_increment, numint(3)notnullunique, locvarchar(10)notnull, uidint(5)notnullunique, constraintuid_fkforeignkey(uid)referencesusers(id) ); insertintocards(num,loc,uid)values(111,'北京',1); insertintocards(num,loc,uid)values(222,'上海',2);
【注:innerjoin表示内连接】
selectu.name"姓名",c.num"身份证号" fromusersuinnerjoincardsc onu.id=c.uid whereu.name='AA'; -- selectu.name"姓名",c.num"身份证号" fromusersuinnerjoincardsc onu.id=c.uid wherename='AA';
---------------------------------------------
一对多:查询"开发部"有哪些员工
创建groups表
droptableifexistsgroups; createtableifnotexistsgroups( idint(5)primarykeyauto_increment, namevarchar(10)notnull ); insertintogroups(name)values('开发部'); insertintogroups(name)values('销售部');
创建emps表
droptableifexistsemps; createtableifnotexistsemps( idint(5)primarykeyauto_increment, namevarchar(10)notnull, gidint(5)notnull, constraintgid_fkforeignkey(gid)referencesgroups(id) ); insertintoemps(name,gid)values('哈哈',1); insertintoemps(name,gid)values('呵呵',1); insertintoemps(name,gid)values('嘻嘻',2); insertintoemps(name,gid)values('笨笨',2);
查询"开发部"有哪些员工
selectg.name"部门",e.name"员工" fromgroupsginnerjoinempse ong.id=e.gid whereg.name='开发部'; -- selectg.name"部门",e.name"员工" fromgroupsginnerjoinempse ong.id=e.gid whereg.name='开发部';
------------------------------------------------------
多对多:查询"赵"教过哪些学生
创建students表
droptableifexistsstudents; createtableifnotexistsstudents( idint(5)primarykeyauto_increment, namevarchar(10)notnull ); insertintostudents(name)values('哈哈'); insertintostudents(name)values('嘻嘻');
创建teachers表
droptableifexiststeachers; createtableifnotexiststeachers( idint(5)primarykeyauto_increment, namevarchar(10)notnull ); insertintoteachers(name)values('赵'); insertintoteachers(name)values('刘');
创建middles表 primarykey(sid,tid) 表示联合主键,这两个字段的整体要唯一
droptableifexistsmiddles; createtableifnotexistsmiddles( sidint(5), constraintsid_fkforeignkey(sid)referencesstudents(id), tidint(5), constrainttid_fkforeignkey(tid)referencesteachers(id), primarykey(sid,tid) ); insertintomiddles(sid,tid)values(1,1); insertintomiddles(sid,tid)values(1,2); insertintomiddles(sid,tid)values(2,1); insertintomiddles(sid,tid)values(2,2);
查询"赵"教过哪些学生
selectt.name"老师",s.name"学生" fromstudentssinnerjoinmiddlesminnerjointeacherst on(s.id=m.sid)and(m.tid=t.id) wheret.name='赵'; -- selectt.name"老师",s.name"学生" fromstudentssinnerjoinmiddlesminnerjointeacherst on(s.id=m.sid)and(t.id=m.tid) wheret.name="赵";
--------------------------------------------------------------------------------------------------------
将5000元(含)以上的员工标识为"高薪",否则标识为"起薪"
将薪水为NULL的员工标识为"无薪"
将5000元(含)以上的员工标识为"高薪",否则标识为"起薪"
将7000元的员工标识为"高薪",6000元的员工标识为"中薪",5000元则标识为"起薪",否则标识为"试用薪"
---------------------------------------------------------------------------------------------------------
内连接(等值连接):查询客户姓名,订单编号,订单价格
【注:customerscinnerjoinorderso使用了别名,以后o就代表orders】
selectc.name"客户姓名",o.isbn"订单编号",o.price"订单价格" fromcustomerscinnerjoinorderso onc.id=o.customers_id; -- selectc.name"客户姓名",o.isbn"订单编号",o.price"订单价格" fromcustomerscinnerjoinorserso onc.id=o.customers_id;
on+两张表连接的条件.一张表的主键,一张表的外键
内连接:只能查询出二张表中根据连接条件都存在的记录,有点类似于数学中交集
----------------------------------------------------
外连接:按客户分组,查询每个客户的姓名和订单数
外连接:既可以根据连接条件查询出二张表中都存在的记录,也能根据一方,强行将另一方就算不满兄条件的记录也能查询出来
外连接可以细分为:
<左外连接:以左侧为参照,leftouterjoin表示 selectc.name,count(o.isbn) fromcustomerscleftouterjoinorderso onc.id=o.customers_id groupbyc.name; -- >右外连接:以右侧为参照,rightouterjoin表示 selectc.name,count(o.isbn) fromordersorightouterjoincustomersc onc.id=o.customers_id groupbyc.name;
leftouterjoin表示左边的内容都会显现出来,例如customerscleftoutjoin表示会把customers中的某列所有内容都找出来
------------------------------------------------------
自连接:求出AA的老板是EE。把自己想象成两张表。左右各一张
selectusers.ename,bosss.ename fromempsusersinnerjoinempsbosss onusers.mgr=bosss.empno; selectusers.ename,bosss.ename fromempsusersleftouterjoinempsbosss onusers.mgr=bosss.empno;
-----------------------------------------------------------------------------------------------
演示MySQL中的函数(查询手册)
日期时间函数:
selectaddtime('2016-8-723:23:23','1:1:1');时间相加 selectcurrent_date(); selectcurrent_time(); selectnow(); selectyear(now()); selectmonth(now()); selectday(now()); selectdatediff('2016-12-31',now());
字符串函数:
selectcharset('哈哈'); selectconcat('你好','哈哈','吗'); selectinstr('www.baidu.com','baidu'); selectsubstring('www.baidu.com',5,3);
数学函数:
selectbin(10); selectfloor(3.14);//比3.14小的最大整数---正3 selectfloor(-3.14);//比-3.14小的最大整数---负4 selectceiling(3.14);//比3.14大的最小整数---正4 selectceiling(-3.14);//比-3.14大的最小整数---负3,一定是整数值 selectformat(3.1415926,3);保留小数点后3位,四舍五入 selectmod(10,3);//取余数 selectrand();//
加密函数:
selectmd5('123456');
返回32位16进制数e10adc3949ba59abbe56e057f20f883e
演示MySQL中流程控制语句
usejson; droptableifexistsusers; createtableifnotexistsusers( idint(5)primarykeyauto_increment, namevarchar(10)notnullunique, salint(5) ); insertintousers(name,sal)values('哈哈',3000); insertintousers(name,sal)values('呵呵',4000); insertintousers(name,sal)values('嘻嘻',5000); insertintousers(name,sal)values('笨笨',6000); insertintousers(name,sal)values('明明',7000); insertintousers(name,sal)values('丝丝',8000); insertintousers(name,sal)values('君君',9000); insertintousers(name,sal)values('赵赵',10000); insertintousers(name,sal)values('无名',NULL);
将5000元(含)以上的员工标识为"高薪",否则标识为"起薪"
selectname"姓名",sal"薪水", if(sal>=5000,"高薪","起薪")"描述" fromusers;
将薪水为NULL的员工标识为"无薪"
selectname"姓名",ifnull(sal,"无薪")"薪水" fromusers;
将5000元(含)以上的员工标识为"高薪",否则标识为"起薪"
selectname"姓名",sal"薪水", casewhensal>=5000then"高薪" else"起薪"end"描述" fromusers;
将7000元的员工标识为"高薪",6000元的员工标识为"中薪",5000元则标识为"起薪",否则标识为"试用薪"
selectname"姓名",sal"薪水", casesal when3000then"低薪" when4000then"起薪" when5000then"试用薪" when6000then"中薪" when7000then"较好薪" when8000then"不错薪" when9000then"高薪" else"重薪" end"描述" fromusers;
以上所述是小编给大家介绍的MySQl数据库必知必会sql语句(加强版),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!