标准SQL

一、SQL语句分类

select语句 查询语句
select
DDL 数据定义语言
create table 建立表
drop table 删除表
alter table 修改表
DML 数据操作语言
insert 增加数据
delete 删除数据
update 修改数据
TCL 事务控制语句
commit 提交
rollback 回滚
savepoint 保存点

二、查询语句

1.SQL中的数学运算

//一个月按照22 计算 求s_emp表中每个人的每天的平均工资
   select  salary,salary/22 from s_emp;
//   一年按照16个月 计算 显示s_emp每个人的月薪和年薪
   select  salary,salary*16 from s_emp;

2.字段或者表达式的别名

   select  salary sal,salary*16 yearsal from s_emp;
  1. SQL中字符串的表达
    使用单引号表达
    ” ’ ’ ‘a’ ‘hello world’
    || 字符串拼接符
   select  first_name,last_name from s_emp;   
//   把first_name 和 last_name 拼接起来
   select  first_name||last_name from s_emp; 

4.NULL 值处理
NULL值和任何值做运算结果都是NULL

处理方式:nvl(par1,par2) 可以处理任何类型 但要求par1和par2类型一致。当par1为NULL 时会返回par2对应的值 par1不为NULL就返回par1。

 select salary,
       nvl(salary*12*(1+commission_pct/100),0)
         from s_emp;  

5.数据的排重 distinct
单字段排重:select distinct salary from s_emp;
多字段排重: 当多个字段的值都相同时 才认为是重复的数据

   SELECT  distinct  id,TITLE, SALARY 
       FROM S_EMP;   

6.常见的条件运算符
= != > < >= <=
SQL 提供的条件运算符

//   表达一个闭区间 [a,b]
       where  字段 between a  and b;
//表达一个字段在一个指定的列表中取值
       where  字段  in (值1,值2,值3);

7.null值的判断 : is null

where  字段 is null; 

8.模糊查询like
SQL中的通配符 : % 0-n个任意字符
_ 1个任意字符

//查询s_emp 表找出 first_name 中第二个字符是a的
        select first_name 
            from  s_emp 
                where first_name like '_a%'; 

特殊的模糊查询

//找出以S_开头的表名
        select table_name from user_tables
            where table_name like 'S\_%' escape '\';

9.,逻辑条件连接符
and
or
not : ca —>not ca
= != ^= <>

 <=
               <      >=
               between a and b  not between a and b
               in        not in  (注意空值)
               like      not like 
               is null   is not null 

10.排序子句
语法:select 字段名
from 表名
where 条件
order by 排序标准 排序方式; 排序方式:

   升序  默认的  asc   自然顺序  字典顺序
//   按照salary 降序排序显示s_emp 表中的id first_name 和 salary
   select id,first_name,salary
       from  s_emp  
           order by salary desc; 

多字段排序:如果第一排序字段的值相同时 就可以启用第二排序字段对数据进行排列。

//按照salary 降序排序显示s_emp 表中的id first_name 和 salary,如果salary相同则使用id升序排。
   select id,first_name,salary
       from  s_emp  
           order by salary desc,id asc; 
tips:NULL 值在排序中的处理作为最大值处理.

11.单行函数和组函数
单行函数:针对sql语句处理的每一行都返回一个结果。sql语句影响多少行就返回多少个结果。
组函数:针对sql语句影响的这一组数据 综合处理之后得到一个结果。无论sql语句影响多少行 只返回一个结果。

 //  upper(par1) 把字符串处理成大写
     select first_name,upper(first_name)
         from s_emp where id=1;

常见组函数:
count(par1) 统计数据的个数
max(par1) 统计最大值
min(par1) 统计最小值
avg(par1) 统计平均值
sum(par1) 统计数据的和

 //  统计s_emp 表中的人数  工资的最大值 和 最小值
   select count(id),max(salary),min(salary)
       from  s_emp;   
 //  统计s_emp 工资的平均值 和 工资的和
   select avg(salary),sum(salary) from s_emp; 

 //特殊的用法
    select avg(distinct salary),
       sum(distinct salary) from s_emp; 

tips:组函数 对NULL值的处理方式 忽略NULL。
11.多表查询
select 需要的字段名
from 表名1,表名2
where 表之间的连接条件;

//等值连接
//显示s_dept 表中的部门名  和 部门对应的地区名。
    select d.name,r.name
        from  s_dept d,s_region r
            where region_id=r.id; 
 //非等值连接
 //  显示s_emp 表中每个员工的工资 以及对应的工资级别
  select salary,grade
      from  s_emp,salgrade
          where salary  between losal and hisal; 

12.特殊的连接——自连接:一张物理表中存储了两层业务含义的数据
要把其中的一层数据查询出来。

  如何找出所有的领导? 8 个领导
     /* 这个找出的是自己管自己的人 */
     select id,first_name
         from  s_emp 
             where  manager_id=id;   
     /* 把一张物理表 通过起别名看成两张逻辑表 */
     select distinct m.id,m.first_name
         from  s_emp e,s_emp m
             where e.manager_id=m.id;

13.外链接: 外连接的结果集 等于内连接的结果集 加上匹配不上
的记录。(一个也不能少) (+)字段对面的表的数据全部被匹配出来
本质上使用的是NULL 记录匹配

//写一个查询显示每个部门的名字 和 部门对应的地区名  :s_dept    s_region 
       select  d.name,r.name 
           from  s_dept d,s_region r
               where d.region_id=r.id;
  //   现在公司的业务扩展了 增加了新的部门
       insert into s_dept values(100,'test100',NULL);
       commit;  
       insert into s_dept values(200,'test200',NULL);
       commit; 
  //   如何显示所有的部门信息?
       select  d.name,r.name 
           from  s_dept d,s_region r
               where d.region_id=r.id(+)

非等值外链接


     //把s_emp 表中每个员工的id  salary 以及工资对应的
       工资级别显示出来。
    select id,salary,grade 
       from  s_emp,salgrade 
           where salary between losal and hisal;
     //给11号涨工资 涨成15000
     update  s_emp set salary=15000 where id=11;
     commit;
     update  s_emp set salary=150 where id=21;
     commit;   
     /* 显示所有的员工的id 和 salary 超出统计范围的
        也要显示 */
     select id,salary,grade 
         from  s_emp,salgrade 
             where salary between losal(+) 
             and hisal(+); 

14.SQL99中的内连接
from a表 join b表 on 表的连接条件
where 过滤条件;
from a表 inner join b表 on 表的连接条件
where 过滤条件;
显示每个部门的名字 和 对应的地区的名字
s_dept s_region
select d.name,r.name
from s_dept d,s_region r
where d.region_id=r.id;
select d.name,r.name
from s_dept d join s_region r
on d.region_id=r.id;
select d.name,r.name
from s_dept d inner join s_region r
on d.region_id=r.id;
15.SQL99中的外连接
1)左外连接 :意思就是a表发起连接代表把a表的数据全部匹配出来。依然使用的是
NULL 记录匹配。
from a表 left outer join b表
on 表的连接条件 where 过滤条件;
2) 右外连接
from a表 right outer join b表
on 表的连接条件 where 过滤条件;

   //   找出新增加的部门?
     select  d.name,r.name    
         from  s_dept d,s_region r
             where d.region_id=r.id(+); 
     select  d.name,r.name    
         from  s_dept d left outer join s_region r
             on d.region_id=r.id; 

//    改成右外连接
 select  d.name,r.name    
         from   s_region r right outer join s_dept d
             on d.region_id=r.id; 

3)全外连接: 全外连接只是一个逻辑概念,全外连接的结果集
等译左外连接的结果集 加上右外连接的结果
集 然后减去重复的记录。

    SQL99语法
      from  a表 full  outer join  b表  
          on 表的连接条件 where 过滤条件; 
     Oracle中的实现
     union  合并两个结果集并排重
            select id from  s_emp  union 
              select id from s_emp;
            union all  合并两个结果集不排重
            select id from  s_emp  union  all
              select id from s_emp;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ANSWER: 下面是创建表的标准SQL语句: CREATE TABLE table_name (column_1 datatype, column_2 datatype, column_3 datatype, ...); ### 回答2: 创建表是数据库操作中的一项重要任务,可以通过标准SQL语句来实现。以下是一个示例的标准SQL语句来创建一个表: ``` CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据类型, 列名3 数据类型, … ); ``` 在上面的语句中,你需要将"表名"替换为你想要创建的表的名称。然后,在括号内指定每列的名称和数据类型。你可以根据需要添加更多的列,并为每个列指定其相应的数据类型。 例如,如果你想要创建一个名为"学生"的表,包含"学生编号"、"姓名"和"年龄"这三个列,你可以使用以下SQL语句: ``` CREATE TABLE 学生 ( 学生编号 INT, 姓名 VARCHAR(50), 年龄 INT ); ``` 在上述示例中,"学生编号"和"年龄"列的数据类型被设置为INT(整数),"姓名"列的数据类型被设置为VARCHAR(50)(最长50个字符的字符串)。 通过使用标准SQL语句来创建表,你可以根据自己的需求定义表的结构和列的特性,为你的数据库应用程序提供一个结构良好的数据存储方案。 ### 回答3: 建表的标准SQL语句如下: CREATE TABLE 表名 ( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... ); 在这个语句中,你需要替换表名、列名和数据类型。 例如,如果你要创建一个名为"学生"的表,包含学号、姓名和年龄三列,可以使用以下SQL语句: CREATE TABLE 学生 ( 学号 INT, 姓名 VARCHAR(50), 年龄 INT ); 在这个例子中,"学号"列使用了整数数据类型(INT),"姓名"列使用了可变长度字符串数据类型(VARCHAR),并且指定了最大长度为50,"年龄"列仍然使用整数数据类型(INT)。这个SQL语句将创建一个名为"学生"的表,它具有这三列和相应的数据类型。 需要注意的是,根据不同数据库管理系统(如MySQL、Oracle、SQL Server等),数据类型的写法可能略有不同,请根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值