sql语句用法的一部分整理

@sql语句用法
一 回顾

  1. DDL create alter drop [truncate==delete] 2. DML select insert update delete 3. DCL grant revoke 4. TCL start transaction |begin commit; rollback; save point 名称;
    二 目标
    1.单表查询 2.多个表的联接查询
    1.简单查询
    运算符
    CREATE TABLE result( studentno INT , subjectno INT, examdate DATE, studentresult INT, #primary key (studentno,subjectno), FOREIGN KEY (studentno) REFERENCES student(studentno), FOREIGN KEY(subjectno) REFERENCES SUBJECT(subjectno) )
    ALTER TABLE result ADD CONSTRAINTS pk_sud_sub_id PRIMARY KEY(studentno,subjectno);
    1 2 3 4 5 6 7 8 9 10 11 12
    1.select * from 表名;//查询出这个表所字段,以及所记录 2.select 字段名,字段名 from 表名; 3.select * from 表名 where 字段=值 and| or 字段=值1;
    1 2 3 4
    is null where 字段名 is null; > < >= <= != like select * from 表名 where 字段 like ‘值%’; % 多个字符位 ‘%a’ 以a结尾 ‘a%’ 以a开始 '%a%'包含a _ 代表一个字符位 where name like ‘_三’;//name中只2个字符,而且第二个字符为三 [a-z] in 相当于多个or select * from 表名 where 字段 in (1,2,3)
    1 2 3 4 5 6 7 8
    limit 0,5分页
    DISTINCT 去重复记录 SELECT DISTINCT studentno FROM result
    聚和函数—多行函数 将表中多条汇总一条记录
    group by 字段名:以这个字段的值来分组,这个字段有多少个值,就分多少个组
    SELECT gradeid,sex,COUNT() FROM student GROUP BY gradeid,sex 2.多表查询
    等值连接查询:
    内联
    not in select * from 表名 where 字段名 not in (1,2,3) between and select * from 表名 where result between 80 and 100; where result>=80 and result<=100 order by 字段名;以这个字段值来排序 asc /desc SELECT * FROM result ORDER BY subjectno DESC,StudentResult DESC;
    9 10 11 12 13 14 15
    //取前三名 SELECT * FROM result ORDER BY StudentResult DESC LIMIT 0,3 page=1 查询出第一页的数据 pageSize=20 select * from table limit (page-1)pageSize,pageSize;
    1 2 3 4 5
    sum(字段名) 求和 count(
    ) 记录数 max() min() avg()
    1 2 3 4 5
    SELECT studentno, COUNT(
    ),MAX(studentresult),MIN(studentresult), SUM(studentresult),AVG(studentresult) FROM result GROUP BY studentno HAVING SUM(studentresult)>1300
    1 2 3
    SELECT studentname,subjectname,studentresult FROM student,result,SUBJECT WHERE student.StudentNo=result.StudentNo AND subject.SubjectNo=result.SubjectNo 1.找出我们要显示的结果表字段名 select 字段名,… 2.列出这个字段所对就表名 from 表名,… 3.找出这几个表之间关系 pk/fk
    1 2 3 4 5 6
    左外联
    右联
    自联接
    3.子查询 将一个查询的结果作为另外一个查询的条件,这个查询先执–子查询
    [any some] all
    select * from emp where salary >all(select salary from emp where deptno=10); select * from emp where salary >any(select salary from emp where deptno=10);
    exists 存在
    子查询有行返回就执行父查询,没有行返回,不执行父查询
    select * from emp where exists (select * from dept);
    SELECT * FROM emp WHERE EXISTS( SELECT * FROM grade WHERE 1=2);
    相关子查询
    SELECT * FROM student WHERE EXISTS (SELECT * FROM result WHERE student. StudentNo =result. StudentNo AND StudentResult>90) 4.联合查询
    SELECT tbl_stud.name,tbl_classes.name,num FROM tbl_stud INNER JOIN tbl_classes ON tbl_classes.cid=tbl_stud.cid
    SELECT tbl_stud.name,tbl_classes.name,num FROM tbl_stud,tbl_classes WHERE tbl_classes.cid=tbl_stud.cid
    1 2 3 4 5 6
    SELECT tbl_classes.cid,tbl_classes.name,tbl_stud.name FROM tbl_classes LEFT JOIN tbl_stud ON tbl_classes.cid=tbl_stud.cid ORDER BY tbl_classes.cid limit
    1
    2
    SELECT tbl_classes.cid,tbl_classes.name,tbl_stud.name FROM tbl_classes right JOIN tbl_stud ON tbl_classes.cid=tbl_stud.cid ORDER BY tbl_classes.cid
    1 2
    3
    SELECT e.name,p.name FROM emp e,emp p WHERE e.pid=p.id
    SELECT e.name,p.name FROM emp e LEFT JOIN emp p ON e.pid=p.id
    1 2 3
    SELECT * FROM emp WHERE salary>(SELECT AVG(salary) FROM emp where deptno=10)1
    将两个或多个查询的结果合并
    //去掉两个结果集中完全相同的行

下面练习题中设计四个表。分别为:
dept表
emp表
salgrade表
tbyear表
SELECT id,NAME FROM tbl_stud UNION SELECT cid,NAME FROM tbl_classes; union all 全部显示
1 2 3 4
\1. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
\2. 列出薪金比关羽高的所有员工。
\3. 列出所有员工的姓名及其直接上级的姓名。
\4. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
\5. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
\6. 列出所有文员的姓名及其部门名称,部门的人数。
\7. 列出最低薪金大于15000的各种工作及从事此工作的员工人数。
\8. 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
\9. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
10.列出与庞统从事相同工作的所有员工及部门名称。
11.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。
12.列出每个部门的员工数量、平均工资。
13.查出年份、利润、年度增长比
SELECT tb1.,IFNULL(CONCAT((tb1.zz-tb2.zz)/tb2.zz100,’%’),0) 年度增长比 FROM tbyear tb1 LEFT OUTER JOIN tbyear tb2
ON tb1. year =tb2. year +1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值