热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一学期积累下来的SQL语句写法的学习

整合了一下上学期学习的积累,希望可以帮到初学者!可能以后会有用吧!A基本语句的运用操作基于emp表1、按工资从高到低排列SQL>selectrownumas次序,ename,sal

整合了一下上学期学习的积累,希望可以帮到初学者!

可能以后会有用吧!

A 基本语句的运用

操作基于emp表
1、按工资从高到低排列
SQL> select rownum as 次序,ename,sal
  2  from (select ename,sal
  3  from emp
  4  order by sal desc)
  5  where rownum<=5
  6  ;
2、做内嵌式图由大到小排序后找前五个的错误写法

SQL> select ename,sal
  2  from emp
  3  where rownum<=5
  4  order by sal desc;
先找前五个记录后按照工资排序(并不是所求,这是错误的写法)

3、把名为scott的job 奖金更改
update emp set job='MANAGER',comm='4000'
 where ename='SCOTT';
4、寻找薪水大于scott或hiredate早于scott的
select ename,empno from emp
where sal>(select sal from emp where ename='SCOTT')
or hiredate>(select hiredate from emp where ename='SCOTT');

5、寻找最大
 select ename,sal from emp
 where sal=(select max(sal) from emp);

6、寻找部门人员小于4 的部门
 select avg(sal) from emp
 where deptno=
 (select deptno from emp
 group by deptno having count(*)<4);

7、一些设置参考
set linesize 180                设置每行显示的字符总数
set pagesize 100             设置每页显示的行数
set feedback on/off          设置是否显示已选择XX行
set heading on/off            设置是否显示列名
set time on/off                   设置是否显示当前系统时间
set timing on/off                设置是否显示每条SQL执行消耗的时间
set termout on/off             设置在执行sql文件时是否在控制台打印相关信息
set trimout on/off              设置是否去除标准输出每行的拖尾空格
set trimspool on/off         设置是否去除spool输出文件中每行的拖尾空格

8、按照不同的维度分组 多维的数据统计
select avg(grade),stu_no,cno
from mark2
group by rollup(cno,stu_no);
先以cno分组,再以stu_no排序
计算一组cno的平均值

9、cube 把group by的数据各维进行组合
 select avg(grade),stu_no,cno
 from mark2
 group by cube(stu_no,cno);

AVG(GRADE) STU_NO     CNO
---------- ---------- ----------
78.8888889
        90            1
83.3333333            2
63.3333333            3
73.3333333 1404010525
        90 1404010525 1
        80 1404010525 2
        50 1404010525 3
83.3333333 1404010526
       100 1404010526 1
        80 1404010526 2
        70 1404010526 3
        80 1404010527
        80 1404010527 1
        90 1404010527 2
        70 1404010527 3
先计算按照cno分组的平均值
再按照(stu_no,cno)分组计算平均值


10、查询一个表中 课程1比课程2分数高的学生号
 select a.num,a.score
 as score1,b.score
 as score2 from(
 select * from sc where cno='001')a
 left join
 (select * from sc where cno='002')b
 on a.num=b.num
 where a.score11、查询表中课程1 比课程2高的学生信息:返回多值?用in!
select num,name
from stu
where num in
(select a.num from(
 select * from sc where cno='001')a
 left join
 (select * from sc where cno='002')b
 on a.num=b.num
 where a.score12、查询平均成绩大于60的学生学号、平均成绩、姓名
1\查询平均成绩大于90的学生学号: select num,avg(score) from sc group by num having avg(score)>90
2\ select num,name
 from stu
 where num in(
  select num from sc group by num having avg(score)>90);(平均成绩怎么办)?

3\select num,avg(score)
from sc
group by num having avg(score)>90;(单查学号和平均成绩)
最后写法:
select stu.num,stu.name,avg(sc.score)
from stu,sc
where stu.num in(
select num from sc group by (sc.num,name) having avg(score)>90)
and stu.num=sc.num ;

13、查询所有同学的学号、姓名、选课数、总成绩
select stu.num,stu.name,count(sc.cno),sum(sc.score)
 from stu,course,sc
 where stu.num=sc.num and course.cno=sc.cno
 group by stu.num,stu.name order by num;

14、查询所有姓李的老师
select * from teacher
where teacher.name like '李%';

15、查询没选过chinese课程的学生的学号与姓名
select stu.num,stu.name
from stu
where stu.num not in
(select distinct stu.num
from stu,course,sc
where stu.num=sc.num and course.cno=sc.cno
and course.name='chinese');
16、查询选过maths课程的所有学生学号与姓名
select stu.num,stu.name
from stu
where stu.num in
(select distinct stu.num
from stu,course,sc
where stu.num=sc.num and course.cno=sc.cno
and course.name='maths');


17、查询同时选过maths和chinese课程的所有学生学号与姓名
 select * from stu
 where stu.num in
 (select num from sc,course where sc.cno=course.cno and course.name='maths')
 and stu.num in
 (select num from sc,course where sc.cno=course.cno and course.name='chinese');

18、查询所有课程小于90分的学生姓名与学号。
 select * from stu
 where stu.num not in
 (select num from sc where score>=90);

 

B PL/SQL语句
1、用table类型输出一些语句
 declare
 type my_table_type is table of varchar(20)
 index by binary_integer;
 my_table my_table_type;
 begin
 my_table(1):='what the fuck';
 my_table(2):='hehe is a gay';
 my_table(3):='what the hell';
 my_table(-100):='is it a fky';
 dbms_output.put_line(my_table(1));
  dbms_output.put_line(my_table(2));
  dbms_output.put_line(my_table(3));
  dbms_output.put_line(my_table(-100));
  dbms_output.put_line(my_table.count);
 end;
 /
2、select语句的应用 :注意,查询结果只能是唯一的一条记录
SQL>  declare
  2   v_dname student.name%type;
  3   v_dept_rec student%rowtype;
  4   begin
  5   select name into v_dname from student where num='02';
  6  dbms_output.put_line('name of student 02 is:'||v_dname);
  7  end;
  8  /
name of student 02 is:wangwu
3、游标:是一个缓存区,在内存里临时存放多条记录的存储区。
打开游标 取数据 关闭游标
4、存储过程
查询指定号码的姓名:
create or replace procedure p1
as
v_ename emp.ename%type;
begin
select ename into v_ename
from emp where empno=7788;
dbms_output.put_line('7788员工姓名为'||v_ename);
end;
/

查询指定编号员工的姓名

create or replace procedure p1(p_no in emp.empno%type)
as
v_ename emp.ename%type;
begin
select ename into v_ename
from emp where empno=p_no;
dbms_output.put_line(p_no||'员工姓名为'||v_ename);
exception
when no_data_found then
dbms_output.put_line('没有这个编号');
when others then
dbms_output.put_line('系统有错');
end;
/

 EMPNO ENAME      JOB              MGR HIREDATE              SAL        COMM DEPTNO

 

C sql语句练习


1、 列出所有员工的姓名及其直接上司的姓名;
select a.ename empname,b.ename mgrname
from emp a,emp b
where a.mgr=b.empno;

2、 列出在“IT”部门工作的员工姓名;
select ename from emp
 where deptno=
 (select deptno from dept
 where dname='IT');

3、 列出工资高于公司平均工资的所有雇员的姓名、编号及部门号;
select ename,deptno,empno from emp
 where sal>(select avg(sal) from emp);

4、 列出在每个部门的员工数量、平均工资;
select avg(sal),count(*)
 from emp
 group by deptno ;

5、列出所有部门的详细信息和部门人数;
select * from dept a left join
 (select count(*),deptno from emp
 group by deptno)
 b
 on
 a.deptno=b.deptno;

6、列出各种职位的最低工资;
select job,min(sal)
from emp
group by job;

7、 列出部门经理中工资最低的那个经理的姓名、工资和部门号;
 select ename,sal,deptno
 from emp
 where sal<=all(
 select sal from emp where job='MANAGER'
 ) and job='MANAGER';

8、 列出公司里工资最高的五位员工的基本信息。
select * from emp
where ename in(
select ename from (
select ename from emp
order by sal desc) a
where rownum <6);


推荐阅读
  • 深入解析 SQL 数据库查询技术
    本文深入探讨了SQL数据库查询技术,重点讲解了单表查询的各种方法。首先,介绍了如何从表中选择特定的列,包括查询指定列、查询所有列以及计算值的查询。此外,还详细解释了如何使用列别名来修改查询结果的列标题,并介绍了更名运算的应用场景和实现方式。通过这些内容,读者可以更好地理解和掌握SQL查询的基本技巧和高级用法。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文介绍了在 MySQL 中如何使用正则表达式来提高查询效率,通过具体示例展示了如何筛选包含中文字符的记录,并详细解释了正则表达式的各种特殊字符和结构。 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 数据库多表联合查询:内连接与外连接详解
    在数据库的多表查询中,内连接和外连接是两种常用的技术手段。内连接用于检索多个表中相互匹配的记录,即只有当两个表中的记录满足特定的连接条件时,这些记录才会被包含在查询结果中。相比之下,外连接则不仅返回匹配的记录,还可以选择性地返回不匹配的记录,具体取决于左外连接、右外连接或全外连接的选择。本文将详细解析这两种连接方式的使用场景及其语法结构,帮助读者更好地理解和应用多表查询技术。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
author-avatar
zhousulian
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有