1.语言问题

修改语言注册表\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432\ORACLE\KEY_DevSuitHome1中的NLS_LANG修改为AMERICAN_AMERICA.ZHS16GBK(这是英语)

查询当前语言select userenv('LANG') from DUAL;

易错select NEXT_DAY ('01-SEP-95',1)from dual;中的1代表周几而不是几天

查看当前数据库参数,plsql_dev中的report/dba/NLS Database Parameters

精确到小时的hire_date+8/24表示的是hire_date时间加上8小时,然后精确显示到小时

2.AVG函数自动忽略NULL值求平均

3.当如下事件发生是,会隐式的执行Commit动作

(1)、数据定义语句被执行的时候,比如新建一张表:Create Table

(2)、数据控制语句被执行的时候,比如赋权GRANT…(
或者DENY)

(3)、正常退出iSQL*Plus 或者PLSQL DEVELOPER, 而没有显式的执行COMMIT 或者ROLLBACK语句

4.NOT NI 易错点

SELECT department_id, department_name
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees)

子查询表中有null这句话就查不出东西就是错的

当然也可以这样解决

SELECT *
FROM departments
WHERE department_id NOT IN(SELECT department_id
FROM employees
WHERE job_id = 'SA_REP'
AND department_id IS NOT NULL)

还可以这样

SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM employees
WHERE department_id
= d.department_id)

当查询的内容有多项,其中包括有分组查询的例如sum等分组函数,但是有的内容不需要,也不能分组的时候,方法是把有分组函数的内容拿出来单独建个子查询,子查询中建立需要的分组,不能分组的就放在子查询的查询外,例如

SELECT e.employee_id,e.last_name,e.salary,e.department_id,m.avg_salary
FROM employees e, (SELECT department_id,AVG(salary) avg_salary
FROM employees
GROUP BY department_id) m
WHERE m.department_id = e.department_id
ORDER BY m.avg_salary DESC;

5.带有数量限制的查询举例

--Practices_18:Show the department number, department name, and the number of employees working in each department that:
--a. Includes fewer than 3 employees
SELECT d.department_id,d.department_name,COUNT(*)
FROM departments d,employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id,d.department_name
HAVING COUNT(*)<3;
--b. Has the highest number of employees:
SELECT d.department_id,d.department_name,COUNT(*)
FROM departments d,employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id,d.department_name
HAVING COUNT(*)>=ALL (SELECT COUNT(*)
FROM departments d,employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id,d.department_name);
--c. Has the lowest number of employees:
SELECT d.department_id,d.department_name,COUNT(*)
FROM departments d,employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id,d.department_name
HAVING COUNT(*)<=ALL (SELECT COUNT(*)
FROM departments d,employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id,d.department_name);

例如查找一个工作种类在1991年前半年招聘了而且在1990年前半年也招聘了,如果用AND条件就不行,应为“同一个表”中不可能同时满足两个条件。此时应该用交集处理

SELECT job_id

FROM   employees

WHERE  hire_date 

BETWEEN'01-JAN-1990'AND'30-JUN-1990'

INTERSECT

SELECT job_id

FROM   employees

WHERE  hire_date BETWEEN'01-JAN-1991'AND'30-JUN-1991';
SELECT job_id FROM employees WHERE hire_date BETWEEN'01-JAN-1990'AND'30-JUN-1990' INTERSECT SELECT job_id FROM employees WHERE hire_date BETWEEN'01-JAN-1991'AND'30-JUN-1991';

对的

SELECT last_name,salary,DECODE(commission_pct,null,'NO','YES') COMM ,CASE
WHEN commission_pct IS NULL THEN 'YES'
ELSE 'NO'
END COMM1
FROM employees;

错的

SELECT last_name,salary,DECODE(commission_pct,null,'NO','YES') COMM ,CASE commission_pct
WHEN IS NULL THEN 'YES'
ELSE 'NO'
END COMM1
FROM employees;

SQL语句容易出现错误的地方-连载的更多相关文章

  1. 在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB'

    在phpmyadmin中执行sql语句出现的错误:Unknown storage engine 'InnoDB' 解决方法:解决方法:             1.关闭MySQL数据库       2 ...

  2. SQL语句:语法错误(操作符丢失)在查询表达式中

    所谓操作符丢失,应该是你在拼接SQL语句是少了关键词或者分隔符,导致系统无法识别SQL语句.建议:1.监控SQL语句,看看哪里出现问题:断点看下最后的sql到底是什么样子就知道了,另外你可以把这段sq ...

  3. PDO中捕获SQL语句中的错误

    使用默认模式-----PDO::ERRMODE_SILENT 在默认模式中设置PDOStatement对象的errorCode属性,但不进行其它不论什么操作. 比如: 通过prepare()和exec ...

  4. SQL 语句使用关键字错误

    异常为SQL Error: 1064, SQLState: 42000 时 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIG ...

  5. 经典面试题sql基础篇-50常用的sql语句(有部分错误)

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  6. mysql5.7执行sql语句出现only_full_group_by错误

    在/etc/my.cnf的[mysqld]组中添加 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISI ...

  7. SQL Server捕获发生The query processor ran out of internal resources and could not produce a query plan...错误的SQL语句

    最近收到一SQL Server数据库服务器的告警邮件,告警内容具体如下所示: DATE/TIME: 10/23/2018 4:30:26 PM DESCRIPTION:  The query proc ...

  8. 我的成长比价系列:java web开发过程中遇到的错误一:sql语句换行错误

    字符串换行导致的错误,确切的说是马虎的错误,自己在编写简单的servlet项目时,在StudentDao.java 中的  查询语句:String  sql= "SELECT Type,fl ...

  9. 转:ibatis常用16条SQL语句

    1.输入参数为单个值 <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" par ...

随机推荐

  1. 使用C# (.NET Core) 实现组合设计模式 (Composite Pattern)

    本文的概念性内容来自深入浅出设计模式一书. 本文需结合上一篇文章(使用C# (.NET Core) 实现迭代器设计模式)一起看. 上一篇文章我们研究了多个菜单一起使用的问题. 需求变更 就当我们感觉我 ...

  2. [HNOI 2015]接水果

    Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black,  她觉得这个游戏太简单了,于是发明了一个更 ...

  3. [ZJOI2007]Hide 捉迷藏

    Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条 ...

  4. P1837 单人纸牌_NOI导刊2011提高(04)

    题目描述 单人纸牌游戏,共36张牌分成9叠,每叠4张牌面向上.每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如黑桃10和梅花10)并且一起拿走.如果最后所有纸牌都被取走,则游戏者就赢了 ...

  5. HDU 6107 Typesetting

    Problem Description Yellowstar is writing an article that contains N words and 1 picture, and the i- ...

  6. RAC基本原理

    RAC基本原理 什么是RAC? 多个实例跑在多个服务器上 一个数据库存放在共享的存储上,所有实例都可以访问 实例之间通过内联网络交换数据和信息 共享存储内容:数据文件.REDO.UNDO.控制文件 参 ...

  7. 关于惠普hp服务器开机时F10菜单变成F10 Function Disabled的解决方法

    今天笔者由于在Intelligent Provisioning智能配置里不小心将"启动Intelligent Provisioning"选项钩选成禁用了,如下 结果就造成,在之后服 ...

  8. idea-JSP out.println报错问题

    <%! out.println("xxxx");%> 上面是错误的,<%!%>是声明变量是使用,而不是进行逻辑输出! <% out.println(x ...

  9. 聪明的搜索算法’ A*算法

    A*算法     是一种启发式的搜索算法. 了解BFS.DFS或者Dijkstra算法的人应该知道.这些算法都是一种向四周盲目式搜索的方法.   启发式搜索:     启发式搜索就是在状态空间中的搜索 ...

  10. MySQL my.cnf 配置文件注释

    以下是my.cnf配置文件参数解释 [client] port                     = 3309socket                   = /home/longxiben ...