SQL语句分为以下三种类型:

  • DML:Data Manipulation Language 数据操纵语言
    1. INSERT
    2. UPDATE
    3. DELETE
    4. SELECT
  • DDL:Data Definition Language 数据定义语言
    1. CREATE TABLE
    2. ALTER TABLE
    3. DROP TABLE
    4. CREATE INDEX
    5. DROP INDEX
  • DCL:Data Control Language 数据控制语言
    1. GRANT 授予访问权限
    2. REMOVE 撤销访问权限
    3. COMMIT 提交事务处理
    4. ROLLBACK 事务处理回退
    5. SAVEPOINT 设置保存点
    6. LOCK 对数据库的特定部分进行锁定

一、基本的SQL-SELECT语句

别名

①直接在字段名后面写  select last_name name,employee_id id from empolyees;

②在字段名后加as  select last_name as name,employee_id as id from empolyees;

③加双引号(当别名由多个单词构成且中间以空格隔开时必用)  select last_name "my name",employee_id as id from empolyees;

连接符

①把列与列,列与字符连接在一起

②用 || 表示

③可以用来'合成'列

select last_name||'`s job_id is '||job_id as details from employees

重复行(去重)distinct

select distinct department_id from employees;

注意:null值也单独为一行

注意:字符和日期必须用单引号括起来(SQL中只有在上面提到的别名时会用到双引号,其它情况都用单引号),SQL语言大小写不敏感,但''括起来的字符串严格区分大小写

二、过滤和排序

过滤 where

-- AND OR NOT 逻辑且/逻辑或/逻辑否

-- [NOT] BETWEEN AND 表示区间内的值,包含边界 等价于 >= and <=

-- [NOT] IN 表示离散的值,where department_id in(70,80,90) 等价于 where department_id=70 or department_id=80 or department_id=90

-- [NOT] LIKE 模糊查询

百分号%表示0…n个字符;

下划线_表示单个字符;

转义字符 ESCAPE,where last_name like  '%\_%' escape '\' (转义字符可以是任何字符 如 \ # $ 等)

-- IS [NOT] NULL 空值

-- 运算优先级

算术运算符>连接符>比较符>IS NULL,LIKE,IN>BETWEEN>NOT>AND>OR

括号可以改变优先级

排序

ORDER BY … DESC(逆序)/ASC(顺序,默认)

select last_name,department_id,salary*12 annual_sal
from employees

--order by 可以不放在where子句

--where department_id > 80

--多级排序

--依字段别名排序
order by annul_sal,last_name desc

三、单行函数

字符

① 大小写控制函数:因为被单引号括出来的内容是严格区分大小写,而有时候查询不在乎大小写,这时候此类函数派上用场

LOWER('SQL Course') → sql course    全部小写

UPPER('SQL Course') → SQL COURSE 全部大写

INITCAP('SQL Course') → Sql Course  单词首字母大写

② 字符控制函数:

CONCAT('Hello','World') → HelloWorld 连接字符串

SUBSTR('HelloWorld',1,5) → Hello       从第1个下角标位置开始截取长度为5的子字符串--Java中下标从0开始,-1代表无效数据;SQL中下标从1开始,0代表无效数据

LENGTH('HelloWorld') → 10                字符串长度

INSTER('HelloWorld','W') → 6             字符在字符串中的位置

LPAD(salary,10,'*') → *****24000     字符串左对齐,用10个位去存,不足在左端用*补齐

RPAD(salary,10,'*') → 24000*****     字符串右对齐,用10个位去存,不足在右端用*补齐

TRIM('H' FROM 'HelloHWorldH') → elloHWorld 去除原字符串中首尾与指定字符相同的字符

REPLACE('abcdb','b','m') → amcdm      将字符串中所有与指定字符相同的字符替换为另一个字符

数值

ROUND() 四舍五入

,1) ROUND(435.45) ROUND(43.45,-1)
                         435.5                  435                       440

TRUNC() 截断

,1) ROUND(435.45) ROUND(43.45,-1)
                         435.4                  435                       430

MOD() 求余

--MOD(1600,15)

10

日期:Oracle中的日期型数据实际含有两个值(日期和时间)

在日期上加上或减去一个数字结果仍为日期

两个日期相减返回日期之间相差的天数

MONTHS_BETWEEN 两个日期相差的月数

ADD_MONTHS         向指定日期中加上若干月数

NEXT_DAY              指定日期的下一个星期几对应的日期

LAST_DAY              本月的最后一天

ROUND                   日期四舍五入

TRUNC                    日期截断

数据类型转换

① 隐式 DATE ←→ VARCHAR2 ←→ NUMBER

源数据类型 目标数据类型
VARCHAR2/CHAR NUMBER
VARCHAR2/CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2

--注意区别,JAVA中+号在字符串运算中代表字符串连接,SQL中字符串连接用的是 ||,+号则表示数学加法运算

select '12' + 2 from dual; --此处'12'隐性转换为NUMBER类型的12

② 显式

TO_CHAR

select employee_id,to_char(hire_date,'yyyy"年"mm"月"dd"日"') --此处在输出日期格式中穿插的字符要用""括起来
   from employees
   where to_char(hire_date,'yyyy/mm/dd') = '1994/06/07'  -- to_date('1994/06/07','yyyy/mm/dd')

TO_DATE

TO_NUMBER

select to_char(1234567.89,'999,999,999.99') from dual; -- 1,234,567.89      不足不用补零

select to_char(1234567.89,'000,000,999.99') from dual; -- 001,234,567.89   不足位数补零

select to_char(1234567.89,'$999,999,999.99') from dual; -- $1,234,567.89   美元符号

select to_char(1234567.89,'L999,999,999.99') from dual; -- ¥1,234,567.89  本地货币符号

select to_number('¥1,234,567.89','L999,999,999.99') from dual; -- 1234567.89 格式要对应上

通用

这些函数适用于任何数据类型,同时也适用于空值

NVL(expr1,expr2) 等价于 expr1!=null?expr1:expr2

--commission_pct 奖金率字段的值有可能为null,是null则用 0 代替

select employee_id,last_name,salary*12*(1+nvl(commission_pct,0)) annual_sal,commission_pct from employees;

--由于department_id是NUMBER类型,而'没有部门'是严格的字符类型,直接调用NVL函数报“无效数字”错误,需进行处理

select last_name,nvl(to_char(department_id),'没有部门') from employees;

NVL2(expr1,expr2,expr3) 等价于 expr1!=null?expr2:expr3

select last_name,nvl2(commission_pct,commission_pct + 0.015,0.01) from employees;

NULLIF(expr1,expr2) 等价于 expr1==expr2?null:expr1

select first_name,length(first_name) "expr1",
       last_name,length(last_name) "expr2",
       nullif(length(first_name),length(last_name)) result
from employees

COALESCE(expr1,expr2,…,exprn) 如果第一个表达式为null,则返回下一个表达式,依次迭代

条件表达式(IF-THEN-ELSE逻辑)

① CASE表达式

CASE expr1 WHEN comparison_expr1 THEN return_expr1
  [WHEN comparison_expr2 THEN return_expr2
   WHEN comparison_exprn THEN return_exprn
   ELSE else_expr]

END

--查询部门号为10,20,30的员工信息,若部门号为10,则打印
--其工作的1.1倍,20号部门,1.2倍,30号部门,1.3倍
select employee_id,last_name,department_id,
       case department_id when 10 then salary*1.1
                                    when 20 then salary*1.2
                                    else salary*1.3
                                    end REVISED_SALARY
from employees
where department_id in(10,20,30)

② DECODE函数

select employee_id,last_name,department_id,
       decode(department_id,10,salary*1.1,
                                        20,salary*1.2,
                                        salary*1.3) REVISED_SALARY
from employees
where department_id in(10,20,30)

[SQL入门级] 第一天 SQL初步的更多相关文章

  1. [置顶] VB6基本数据库应用(三):连接数据库与SQL语句的Select语句初步

    同系列的第三篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9455721 连接数据库与SQL语句的Select语句初步 ”前文再续, ...

  2. 第一篇 SQL Server安全概述

    本篇文章是SQL Server安全系列的第一篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  3. 第一篇 SQL Server代理概述

    本篇文章是SQL Server代理系列的第一篇,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Serve ...

  4. 第三篇——第二部分——第一文 SQL Server镜像简介

    原文:第三篇--第二部分--第一文 SQL Server镜像简介 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563 镜像是什 ...

  5. 第一篇——第一文 SQL Server 备份基础

    原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...

  6. 【译】第一篇 SQL Server安全概述

    本篇文章是SQL Server安全系列的第一篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  7. 【译】第一篇 SQL Server代理概述

    本篇文章是SQL Server代理系列的第一篇,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Serve ...

  8. 利用pl/sql执行计划评估SQL语句的性能简析

    一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在.  那么,作为 ...

  9. 使用sql语句创建修改SQL Server标识列(即自动增长列)

    一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...

随机推荐

  1. 关于ps中的锯齿

    1.1 索引透明颜色与Alpha透明通道   要说索引颜色透明,首先要讲讲什么是索引颜色,百度百科上有对索引颜色的解释,我觉得很关键的一句是“挑选一副图片中最有代表性的若干种颜色(通常不超过256种) ...

  2. 使用TouchScript做2D按钮实现长按功能

    导入TouchScript 下载地址:https://www.assetstore.unity3d.com/#/content/7394 把TouchScript和Touch Debugger两个预设 ...

  3. .net手机号码归属地查询

    调用百度 api http://apistore.baidu.com/apiworks/servicedetail/117.html 贴上代码 using Newtonsoft.Json;using ...

  4. 【转发】关于Java性能的9个谬论

    转载请注明出处,感谢大家的支持!本文来自优优码:http://www.uucode.net/201502/9%e4%b8%aa%e8%b0%ac%e8%ae%ba Java的性能有某种黑魔法之称.部分 ...

  5. Windows 7 常用快捷键

    常用的快捷键 Win键+D 回到桌面/当前界面(切换)Win键+M 回到桌面Win键+E 资源管理器Win键+R 运行 Win键+U 控制面板->所有控制面板项->轻松访问中心 Win键+ ...

  6. Codeforces Round #384 (Div. 2) E

    给出n个数字 1-8之间 要求选出来一个子序列 使里面1-8的数字个数 极差<=1 并且相同数字必须相邻(112 可以但是121不行)求这个子序列的最长长度 一道状压dp 看不懂别人的dp思想. ...

  7. python2.x与3.x差别

    数字常量: 八进制 十六进制 二进制 2:0177 0o177   0x9ff 0b101010 3:0o177 0x9ff 0b101010 多种字符串: 2:一般字符串,Unicode字符串 3: ...

  8. HBASE数据模型&扩展和负载均衡理论

    示例数据模型 HBase中扩展和负载均衡的基本单元成为region,region本质上是以行健排序的连续存储区间.如果region太大,系统会把它们 自动拆分,相反的,就是把多个region合并,以减 ...

  9. iOS 简单滤镜

    转自:http://blog.csdn.net/lovechris00/article/details/51496458 1.主要是运用 ImageUtil库,把原图通过矩阵色值设置层不同滤镜效果下的 ...

  10. spring boot + gradle[草稿]

    入门文档:https://github.com/qibaoguang/Spring-Boot-Reference-Guide 安装gradle 官方下载 https://gradle.org/grad ...