`

学习SQL查询语句

阅读更多
--desc 表名 描述表的内容   
desc emp;

--加上数学表达式和列名  ""保持格式
select ename "name space", sal*12 year_sal from emp;    

select 2*3 from dual;

select sysdate from dual;

--空值的数学表达式 结果都是空值
select ename, sal*12 + comm from emp;   

--"||"字符串连接 单引号中的是字符串,字符串中的单引号,''表示
select ename||sal from emp;     

--distinct 修饰两个字段
select distinct deptno, job from emp;

select ename, sal from emp where sal between 800 and 1500;
select ename, sal from emp where sal >= 800 and sal <= 1500;

select ename, sal from emp where comm is null;


--一个事务开始于一条ddl语句,结束语rollback commit ddl数据定义语句 dcl数据控制语句语句
--正常断开连接 提交 非正常断开连接 回滚

select ename, sal from emp where sal not in (800 ,1500);

-- 模糊查询
select ename, sal from emp where ename like '_A%';
select ename, sal from emp where ename like '%\%%';

--转义字符
select ename, sal from emp where ename like '%$%%' escape '$';

--排序
select * from dept order by deptno desc;
select ename, sal from emp order by deptno asc, ename desc;

--函数
select lower(ename) from emp;
select substr(ename,1,3) from emp;
select round(23.652, 1) from dual;
select to_char(sal, '$99,999.999') from emp;
select to_char(sal, 'L000,000.000') from emp;
select to_char(hiredate, 'yyyy-mm-dd hh:mi:ss') from emp;
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;
select ename, hiredate from emp
    where hiredate > to_date('1982-09-11 12:44:44', 'YYYY-MM-DD HH24:MI:SS');
select sal from emp where sal > to_number('$1,250.000', '$9,999.000');
select ename,sal*12 + nvl(comm, 0) from emp;

--组函数  多行输入,只有一行输出 select ename, max(sal) from emp; 结果不能保证只有一行
select max(sal) from emp;
select sum(sal) from emp;
select count(distinct deptno) from emp;

--分组函数
select deptno,avg(sal) from emp group by deptno;
select deptno, job, max(sal) from emp group by deptno, job;


--rollup、cube配合group by命令使用,可以提供信息汇总功能(类似于"小计")  
select job,deptno,sum(sal) total_sal from emp group by rollup(job,deptno);  


--出现在select后,不是组函数的,必须出现在group by里
--where语句对单挑记录进行过滤,分组后过滤用having

--子查询 把一次查询结果当成表
select ename from emp where sal = (select max(sal) from emp);
select ename, sal from emp
    join (select max(sal)max_sal, deptno from emp group) t
    on(t.max_sal = emp.sal and t.deptno = emp.deptno);

--自连接
select t1.ename, t2.ename from emp t1, emp t2 where t1.mgr = t2.empno;


select ename, dname, grade from emp e, dept d, salgrade s 
where e.deptno = d.deptno and e.sal between s.losal and s.hisal and job <> 'CLERK';

--SQL 1999  链接条件不写在where中,where只负责过滤数据
select ename, dname from emp cross join dept;
select ename, dname from emp join dept on (emp.deptno = dept.deptno);
select ename, dname from emp join dept using (deptno);

select ename, grade from emp e join salgrade s on (e.sal between s.losal and s.hisal);
select e1.ename, e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);

--左外连接
select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);
--右外连接
select ename, dname from emp e right join dept d on (e.deptno = d.deptno);
select ename, dname from emp e full outer join dept d on (e.deptno = d.deptno);

--求部门中那些人薪水最高
select ename, sal  from emp 
join (select deptno, max(sal) max_sal from emp group by deptno) t 
on (emp.sal = t.max_sal and emp.deptno = t.deptno);

--求部门平均薪水的等级
select deptno, grade from salgrade s 
join (select avg(sal) avg_sal, deptno from emp group by deptno) t 
on (avg_sal between losal and hisal);

--求平均薪水最高的部门的部门标号
select deptno, avg_sal from
(select avg(sal) avg_sal, deptno from emp group by deptno)
where avg_sal =
(select max(avg(sal)) from emp group by deptno);

--平均薪水的等级最低的部门的部门名称
select dname, t1.deptno, grade, avg_sal from
(  select deptno, grade, avg_sal from
  (select deptno, avg(sal) avg_sal from emp group by deptno) t
  join salgrade s on (t.avg_sal between s.losal and s.hisal)
) t1
join dept on (t1.deptno = dept.deptno)
where t1.grade = 
(
  select min(grade) from
  (  select deptno, grade, avg_sal from
    (select deptno, avg(sal) avg_sal from emp group by deptno) t
    join salgrade s on (t.avg_sal between s.losal and s.hisal)
  )
)

--建立视图
create view v$_dept_avg_sal_info as
select deptno, grade, avg_sal from
  (select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal);

--变简单了
select dname, t1.deptno, grade, avg_sal from
v$_dept_avg_sal_info t1
join dept on (t1.deptno = dept.deptno)
where t1.grade = 
(
  select min(grade) from v$_dept_avg_sal_info
)

--求部门平均薪水的等级
select deptno, avg_sal, grade from
  (select avg(sal) avg_sal, deptno from emp group by deptno)
join salgrade s
on (avg_sal between s.losal and s.hisal);

--求部门平均的薪水等级
select avg(grade), deptno from
(
  select deptno, ename, grade from emp
  join salgrade s
  on emp.sal between s.losal and s.hisal
) 
group by deptno

--雇员中有哪些人是经理人
select ename from emp where empno in
(select distinct mgr from emp);

--不使用组函数,求薪水的最高值
select distinct sal from emp where sal not in
(select distinct e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal));

--平均薪水最高的部门的部门名称
select dname from dept where deptno =
(
  select deptno from
    (select avg(sal) avg_sal, deptno from emp group by deptno)
  where avg_sal =
  (select max(avg_sal) from
    (select avg(sal) avg_sal, deptno from emp group by deptno)
  )
)

--求比普通员工的最高薪水还要高的经理人名称
select ename from emp 
where empno in (select distinct mgr from emp where mgr is not null) and sal >
(
  select max(sal) from emp where empno not in
  (select distinct mgr from emp where mgr is not null)
)

--rownum只能和小于等于号联合使用
--使用rownum 要关联表
select ename from
(select rownum r, ename from emp) where r > 10;

--薪水最高的5个人
select ename, sal from
(select ename, sal from emp order by sal desc)
where rownum <= 5;

--薪水最高的第六个到第十个雇员
select ename, sal from
  (
  select ename, sal, rownum r from
    (select ename, sal from emp order by sal desc)
  )
where r >= 6 and r <= 10


--http://penghao122.iteye.com/blog/54810
--SQL面试题
--找出没选过“黎明”老师的所有学生姓名。 
select sname from s 
join sc on (sc.sno = s.sno)
join c on (c.cno = s.cno) 
where c.cteacher <> 'liming';

--列出2门以上(含2门)不及格学生姓名及平均成绩。 
select sname where sno in 
  (
  select sno from sc where scgrade < 60
  group by sno having count(*) >= 2
  )

--即学过1号课程有学过2号课所有学生的姓名
select sno from sc where cno = 1 and sno in
(
  select sno from sc where cno = 2
);

--一个事务开始于一条ddl语句,结束语rollback commit ddl数据定义语句 dcl数据控制语句语句
--正常断开连接 提交 非正常断开连接 回滚




送上mysql中的,oracle默认表(emp,dept, salgrade)的建表语句

CREATE TABLE EMP
       (EMPNO numeric(4) NOT NULL,
        ENAME VARCHAR(10),
        JOB VARCHAR(9),
        MGR numeric(4),
        HIREDATE DATE,
        SAL numeric(7, 2),
        COMM numeric(7, 2),
        DEPTNO numeric(2));

INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        '1980-12-17',  800, NULL, 20);
INSERT INTO EMP VALUES
        (7499, 'ALLEN',  'SALESMAN',  7698,
        '1981-11-20', 1600,  300, 30);
INSERT INTO EMP VALUES
        (7521, 'WARD',   'SALESMAN',  7698,
        '1981-02-22', 1250,  500, 30);
INSERT INTO EMP VALUES
        (7566, 'JONES',  'MANAGER',   7839,
        '1981-04-02',  2975, NULL, 20);
INSERT INTO EMP VALUES
        (7654, 'MARTIN', 'SALESMAN',  7698,
        '1981-09-28', 1250, 1400, 30);
INSERT INTO EMP VALUES
        (7698, 'BLAKE',  'MANAGER',   7839,
        '1981-05-01',  2850, NULL, 30);
INSERT INTO EMP VALUES
        (7782, 'CLARK',  'MANAGER',   7839,
        '1981-01-09',  2450, NULL, 10);
INSERT INTO EMP VALUES
        (7788, 'SCOTT',  'ANALYST',   7566,
        '1982-12-09', 3000, NULL, 20);
INSERT INTO EMP VALUES
        (7839, 'KING',   'PRESIDENT', NULL,
        '1981-11-07', 5000, NULL, 10);
INSERT INTO EMP VALUES
        (7844, 'TURNER', 'SALESMAN',  7698,
        '1981-09-08',  1500,    0, 30);
INSERT INTO EMP VALUES
        (7876, 'ADAMS',  'CLERK',     7788,
        '1983-01-12', 1100, NULL, 20);
INSERT INTO EMP VALUES
        (7900, 'JAMES',  'CLERK',     7698,
        '1981-11-03',   950, NULL, 30);
INSERT INTO EMP VALUES
        (7902, 'FORD',   'ANALYST',   7566,
        '1981-12-03',  3000, NULL, 20);
INSERT INTO EMP VALUES
        (7934, 'MILLER', 'CLERK',     7782,
        '1982-01-12', 1300, NULL, 10);


CREATE TABLE DEPT
       (DEPTNO numeric(2),
        DNAME VARCHAR(14),
        LOC VARCHAR(13) );

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

CREATE TABLE BONUS
        (ENAME VARCHAR(10),
         JOB   VARCHAR(9),
         SAL   numeric,
         COMM  numeric);

CREATE TABLE SALGRADE
        (GRADE numeric,
         LOSAL numeric,
         HISAL numeric);

INSERT INTO SALGRADE VALUES (1,  700, 1200);
INSERT INTO SALGRADE VALUES (2, 1201, 1400);
INSERT INTO SALGRADE VALUES (3, 1401, 2000);
INSERT INTO SALGRADE VALUES (4, 2001, 3000);
INSERT INTO SALGRADE VALUES (5, 3001, 9999);

CREATE TABLE DUMMY
        (DUMMY numeric);

INSERT INTO DUMMY VALUES (0);




Oracle树状查询
Select  *  from tablename
  start with [condition1]
  Connect By Prior  [condition2]
  where [condition3]

condition1 通常是用于筛选某颗树或者多颗树的结点,这里所的树包括子树,

condtion2 通常是用于连接父结点和子结点的关系,prior 所表示的是上一条记录,通常用法:prior id = pid,(上一条的的ID号是本条记录的父类ID号)这样就把整个树状结构给建立起来了。

conditon3 就是我们通常的where语句,过滤某些记录。
分享到:
评论

相关推荐

    SQL查询语句使用详解,[收集].pdf

    FROM 子句指定 SELECT 语句查询及与查询相关的表或视图。在 FROM 子句中最多可指定 256 个表或视图,它们之间用逗号分隔。 * 指定多个表或视图:在 FROM 子句同时指定多个表或视图时,如果选择列表中存在同名列,...

    学习SQL查询语句,首先必须解决一个问题,数据问题

    学习SQL查询语句,首先必须解决一个问题,数据问题。这里为大家准备了完整的几个表的数据

    可视化sql查询语句生成器

    对于开发人员来说,尤其是需要频繁进行数据查询时,可以快速构建和测试SQL语句,节省了大量的时间。同时,它降低了错误率,因为大多数工具会自动检查语法和逻辑错误,确保生成的SQL语句是有效的。 另外,可视化界面...

    sql查询语句练习(解析版)[借鉴].pdf

    通过本资源,读者可以学习和掌握 SQL 查询语句的编写和应用。 知识点: 1. 数据库的基本概念:数据库、表、字段、记录等概念。 在 SQL 查询语句中,我们可以看到数据库的基本概念,如数据库、表、字段、记录等。...

    sql sql sql sqlsql 语句学习 sql sql sql

    sql 语句学习 sql sql sqlsql 语句学习 sql sql sql

    SQL查询语句转换成图结构的算法设计与实现.pdf

    SQL查询语句转换成图结构的算法设计与实现 本文旨在设计并实现将SQL查询语句转换成图结构的算法,利用图神经网络对SQL查询语句进行分析和处理。该算法可以将SQL查询语句中的字段、表名、函数、操作符、值和关键字...

    SQL查询语句大全SQL查询语

    - 一组SQL语句的集合,要么全部执行成功,要么全部回滚。常用命令:`BEGIN TRANSACTION`, `COMMIT`, `ROLLBACK`. 9. **存储过程(Stored Procedure)** - 包含一组预编译的SQL语句,可多次调用。创建存储过程:`...

    SQL查询语句学习与测试.rar

    子查询是嵌套在其他SQL语句中的查询,它可以返回一个或多个结果集,这些结果集可以被外部查询使用。 4. **视图** 视图是虚拟的表,它基于一个或多个表的查询结果。创建视图可以简化复杂的查询,提供数据的安全性...

    ACCESS数据库与SQL查询语句生成示例

    在ACCESS中,通过“模块”可以输入和执行SQL语句,实现更复杂的数据处理。这对于需要自动化或批量处理数据的场景尤其有用。 5. **示例应用**:例如,假设我们有一个名为"Employees"的表,包含"ID"、"Name"和"Salary...

    SQL查询语句大全(集合多个教程)

    7. **存储过程**:预编译的SQL语句集合,可以接受参数,执行多次,提高性能,并提供封装和安全性的优点。 8. **触发器**:当满足特定条件时自动执行的SQL代码,常用于实现复杂的业务规则或审计功能。 9. **视图**...

    经典的sql查询语句大全,很全很详细,适合初学者

    总结来说,"经典的sql查询语句大全"是学习SQL的良好起点,它涵盖了从基础到进阶的各种查询技巧,对于建立和管理数据库,特别是构建学生选课系统这类应用,是非常实用的资源。通过学习并实践这些查询语句,不仅能够...

    SQL查询语句精华总结

    在Java中,可以使用JDBC(Java Database Connectivity)API来执行SQL语句。首先需要加载驱动,建立连接,创建Statement或PreparedStatement对象,然后执行SQL并处理结果集。 ```java Class.forName(...

    数据库SQL查询语句练习题.pdf

    数据库SQL查询语句练习题 数据库SQL查询语句是数据库管理系统中的一种基本语言,用于对数据库中的数据进行查询、插入、更新和删除等操作。本文档提供了一个教学数据库Education的查询练习题,涵盖了基本的查询语句...

    sql查询语句学习测试答案.docx

    SQL 查询语句学习测试答案 本文档提供了 SQL 查询语句的学习测试答案,涵盖了单表查询、多表查询和综合查询等多种查询类型。 单表查询 1. 查询订购日期在 1996 年 7 月 1 日至 1996 年 7 月 15 日之间的订单的...

    sql数据库基本查询语句整理

    学习SQL查询语句是理解数据库管理和数据分析的关键。通过这些文档,初学者可以逐步掌握如何有效地从数据库中提取信息,为更高级的数据处理和分析打下坚实基础。记得实践是掌握任何技能的最佳途径,所以尝试编写和...

    数据库中SQL查询语句习题含答案.doc

    通过这份资源,读者可以学习和掌握数据库中 SQL 查询语句的基础知识和高级应用。 一、检索计算机系的全体学生的学号、姓名和性别 在这个问题中,我们需要检索计算机系的全体学生的学号、姓名和性别。为了解决这个...

    SQL查询语句大全集锦(超经典)_sql_

    本资源"SQL查询语句大全集锦(超经典)"为学习SQL提供了丰富的参考资料,旨在帮助用户更高效地掌握SQL的核心概念和实际应用。 一、SQL基础 SQL主要包括以下部分: 1. 数据定义语言(DDL):用于创建和修改数据库...

    sql学习 查询语句

    sql学习sql学习sql学习sql学习sql学习sql学习sql学习sql学习sql学习sql学习sql学习

    SQL server语句的学习

    2. 分析例子中的SQL语句,理解其语法结构和逻辑。 3. 在SQL Server环境中运行代码,观察结果,对比预期。 4. 尝试修改例子,如改变选择的列、添加或修改条件,观察变化。 5. 学习并应用新的概念,如联接、分组和聚合...

Global site tag (gtag.js) - Google Analytics