• Oracle DML , DDL , DCL


    DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据。

        DML包括:  SELECT:用于检索数据;
            INSERT:用于增加数据到数据库;
            UPDATE:用于从数据库中修改现存的数据 
            DELETE:用于从数据库中删除数据。

     DDL(Data Definition Language,数据定义语言): 用于定义数据的结构,比如 创建、修改或者删除数据库对象。
       
        DDL包括:DDL语句可以用于创建用户和重建数据库对象。下面是DDL命令:
            CREATE TABLE:创建表
            ALTER TABLE
            DROP TABLE:删除表
            CREATE INDEX
            DROP INDEX

     DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。

        DCL包括:
            ALTER PASSWORD 
            GRANT 
            REVOKE 
            CREATE SYNONYM

    一:DCL(数据控制语言)
        1、创建用户test2,密码也是test2(记得最有以分;号结束):
            create user test2 identified by test2;

        2、给test2授权:create session;(允许用户登陆Oracle):
            grant create session to test2;

        3、给test2分配创建表的权限;
            grant create table to test2;

        4、给test2分配表空间的使用权限;
            grant unlimited tablespace to test2;

    二:DDL(数据定义语言练习)
        1、创建表:SQL> create table t_user(
                    userid number(30) not null primary key,
                    username varchar(20) not null,
                    age number(3),
                    sex varchar(2),
                    departid number(30) not null,
                    foreign key(departid) references t_depart(departid)
                );
        ★alter table student add primary key(userid)这样用alter也可以创建关联主外键。

        2、删除表:SQL> drop table t_depart;
        
        3、创建序列:
            create sequence seq_a minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache; 

    三:DML(数据操作语言):
        1、insert插入SQL:
            (1)insert into t_depart (departid,departname,createdate)
               values (1,'市场部',sysdate);
            (2)insert into t_user values (seq_user.nextval,'马文涛',23,'男');

        2、delete删除SQL:
            (1)delete t_user;(太可怕了,如果在删除时不加条件,则把此表中的所有数据都会删除!)
            (2)delete t_user where userid = 3;

        3、update更新SQL:
            (1) update t_user set username = '争伟',sex = '男';
                (太恐怖了,更新时不加条件表中所有行记录的姓名都被修改了!)
            (2)update t_user set username = '文涛' where userid = 7;
        ★小结:我发现在增、删、改的SQL语句中用不到from关键字。
        
        4、select查询SQL:格式——>select···from···where···group by···having···order by···;
            (1)查询所有的用户:select * from t_user;
             ★在oracle中这里的表明用别名时不能加as关键字
             如:    select * from t_user u;正确
                select * from t_user as u;错误

            (2)查询指定的列: select username,sex from t_user;

            (3)as给列以别名显示:select username as 用户名 from t_user;(这里的as关键字可以省略)

            (4)distinct去掉重复的行:select distinct username from t_user;

            (5)使用运算符:select age+10 from t_user;(给每个人的年龄都加10岁)

            (6)连接字符串: select '用户名:' || username from t_user;(Oracle用||做连接字符串操作符)

            (7)where子句:select * from t_user where username = '宝宝';

            (8)between and在···之间:
                select * from t_user where userid between 9 and 10;这也等价于下面这条SQL:
                select * from t_user where userid >=9 and userid <=10;

            (9)in匹配集合中的任意值:select * from t_user where username in('马文涛','宝宝');

            (10)like模糊查询:%匹配0个或多个任意字符串,_匹配1个任意字符串。

                select * from t_user where username like '%涛%';

            (11)null判断某列为空:select * from t_user where sex is null;
                (这里用is,不能用=,如果要返回不为null的记录就可以用is not null)
                
            (12)order by排序:ASC: 升序排列(可以省略),DESC: 降序排列
                升序:select u.userid,u.username from t_user u order by u.userid;
                降序:select u.userid,u.username from t_user u order by u.userid desc;

            (13)系统函数(对一组数据进行处理,返回一个值):
                AVG–求平均值,COUNT–统计记录数,MAX–最大值,MIN–最小值,SUM–求和
                <1>返回最小和最大的用户编号: select min(userid),max(userid) from t_user;
                <2>返回总记录数: select count(*) from t_user;
                <3>返回某个字段不为空的记录数: select count(sex) from t_user;
                <4>返回不为空且不重复的记录数: select count(distinct sex) from t_user;

            (14)group by分组(分组了就不能直接返回*,经常和聚合函数count(age)一起使用):
                 <1>按姓名分组,并统计每组人数:select count(*),username from t_user group by username;
                 <2>根据多个字段分组: select username,age,count(*) from t_user group by username,age;
            ◆group by有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。

            (15)having过滤分组:select username from t_user group by username having count(*) > 2;

            (16)子查询(子查询自身只能返回一个单独的值):
                <1>子查询放在select后面,作为其中的一个字段返回。
                    select u.username,(select d.departname from t_depart d where d.departid = u.departid) from t_user u;
                    (返回用户和所属的部门,这中子查询理论上先执行外面的查询,只是我的感觉哦,嘿嘿!)
                <2>子查询放在from后面,作为一张临时表。
                    select * from (select username,sex s from t_user where departid=1) 
                    where s = '男';
                    (这种子查询应该先执行里面)
                <3>子查询放在where后面,作为条件的一部分。
                    select * from t_user where departid = (select departid from t_depart where departname = '财务部');
                    (这种子查询也应该先执行里面)

            (17)联合查询(当n张表连接时, 需要n-1个连接条件):
                <1>等值连接(内连接):select u.username,d.departname from t_user u,t_depart d
                         where u.departid = d.departid;
                <2>外连接:即把不满足条件的记录也返回,用个+就行了,
                (+)操作符在哪边就代表另外一边不满足联合条件的记录可以被输出。这个感觉不太常用。
                    select b.book_id,b.book_name from book_info as b,book_click_num as c
                     where b.book_id = c.book_id(+);

     

  • 相关阅读:
    sql server 2008 评估期已过期解决办法 + vs2008破解(转) 狼人:
    发现godaddy亚太机房主机比较慢,怎样转到godaddy美国机房 狼人:
    模拟提交有文件上传的表单(通过http模拟上传文件) 狼人:
    WordPress 批量关闭和打开评论功能 狼人:
    英文seo外链资源整合,怎么样找国外博客资源? 狼人:
    WindowsServer2003+IIS6+ASP+NET+PHP+MSSQL+MYSQL配置说明 |备份于waw.cnblogs.com 狼人:
    Excel表格的35招必学秘技(学会计的快来转载,留着以后用) 狼人:
    MSN去窗口广告方法http://apatch.org/downloads/ 狼人:
    js 实现谷歌浏览器中隐藏标签后setInterval事件暂停 狼人:
    SQL Server 2008过期导致MSSQLSERVER服务无法启动 狼人:
  • 原文地址:https://www.cnblogs.com/pugang/p/13770440.html
Copyright © 2020-2023  润新知