zoukankan      html  css  js  c++  java
  • SQL

    数据库的常见操作(SQL)和流程:

          1.安装数据库

          2.安装好数据库之后配置path路径:在系统环境变量中的path变量,编辑它(将Mysql的安装路径XXX/bin配置到path中)

            3.Windows键+r进入dos,在该窗口中输入Mysql -u root -p再按回车。其中root为安装数据库设置的用户名。

          4.之后会提示输入密码,再输入安装数据库时设置的密码即可进入Mysql。

          5.show databases;即可查看已经创建的所有数据库。自己创建数据库: create database mydb2; (mydb2是被创建的数据库名称)

          6.进入数据库 , use mydb2(mydb2 是已创建的数据库)

          7.进入数据库之后可查看所有的表:show tables;显示出该数据库中的所有表。

            查看表结构:desc department;

            修改编码:alter table department character set  编码名;

            查看编码:show variables like 'chara%';

            查看建表语句:show create table department;(department为表名)

            创建表:create table department(dept_name varchar(20),building varchar(15),budget numeric(12,2),primary key(dept_name));

            插入元组:insert into department values('Comp.Sci','Taylor',100000);(插入元组的每一个属性值要和创建时的属性列表一一对应,即'Comp.Sci'是

                  varchar(20),'Taylor'是varchar(15),100000是numeric(12,2))

            删除元组:delete from department where dept_name='Comp.Sci';即删除dept_name为Comp.Sci的元组;

            增加属性: alter table department add A D;(department为被插入的表,A为待插入的属性名称,D为带插入的属性类型)

            修改属性: alter table department change column oldName  newName   char(12);

            修改数据类型: alter table dapartment modify 字段 数据类型;

            建表后设置主码:alter table 表名 add constraint 主键名 primary key(属性名);说明:主键名是自定义的一个字符串,删除时也是用这个,括号中的属性名才

                    是表中的字段。

        注意点:numeric和decimal 是一样的数据类型。在Mysql中建表时用numeric 但是用show create table department.显示的是decimal

        外键约束:foreign key(dept_name) references department(dept_name);表示foreign key里面的dept_name必须在department的foreign里面出现过;

    SQL查询:

        单关系查询:select 属性名 from  关系名;说明:属性名可以是关系中的多个字段,如果要查询关系中的全部属性可以用*代替属性名,即:select * from  关系名;

              删除重复:select distinct 属性名 关系名;说明:强行删除查询的重复元素。

              保留重复:select all 属性名 关系名;说明:保留查询的重复元素(默认保留重复,所以查询的时候可以不加all)。

              select 属性名 from 关系名 where 条件;

                例如:select name from instructor where dept_name='Comp.Sci.'and salary>70000; 说明:找出instructor中dept_name为Comp.Sci.

                                                              并且salary>70000的name。

                where 字句中可使用逻辑连接词:and,or,not。逻辑连接词对象可以是包含比较运算符:<,>,<=,>=,=,和<>。

        多关系查询:select 属性名 from 关系名1,关系名2,......关系名n where 条件;找出from关系中满足where条件的属性名列表。

              from字句定义了一个在该字句中所列出关系上的笛卡尔积。where字句中的谓词用来限制笛卡尔积所建立的集合,只留下那些对所需答案有意义的组合。

        自然连接:自然连接作用于两个关系上并产生一个关系作为结果,关键字:natural join。

              作用:自然连接只考虑那些在两个模式中都出现的属性上取值相同的元组对,属性列表顺序为:先是两个关系模式中的共同属性,然后是只出现在第一个关系

                  模式中的属性,最后只出现在第二个模式中的属性。

              多个关系自然连接:select a1,a2,...an from r1 natural join r2 natural join r3......natural join rn where P;

              自然连接与笛卡尔积:select a1,a2,...an from r1 natural join r2,r3 where P;说明:r1和r2先做自然连接,自然连接的结果再和r3做笛卡尔积,最后

                        保留满足where 字句的元组。

                        假如我们要列出教师的名字和他们所教课的名字。下面的查询是错误的:

                        select name ,title from instructor natural join teaches natural join course;该查询会忽略所有的(教师姓名,课程名称)对

                        所以出现了以下查询:

                                  select name,title from (instructor natural join teaches)join course using(course_id);

                                表示:instructor和teaches自然连接再和course自然连接,第二次连接需要具有相同的course_id。

        更名运算:关键词 as

             r1 as r2;r1的名字改为r2。

        修改表名:rename table 原表名 to 新表名;

        字符串运算:串联使用||;大小写敏感(但是在一些数据库中'C'='c'结果可能是true,是否大小写敏感可在数据库中修改);upper(s)将小写转换为大写,lower(s)将

              字符串转换为小写;trim(s)去掉字符串后面的空格;

              %匹配任意字符串;_匹配任意字符;

              select dept_name from department where building like '%Watson%';意为找出所在建筑名称中包含子串Watson的所有系名。

              select dept_name from department where building not like '%Watson%';意为找出所在建筑名称中不包含子串Watson的所有系名。

        元组的显示次序:order by desc(表示降序),order by asc(表示升序),默认为升序。

        where字句谓词:select name from instructor where salary between 90000 and 100000;

                select name form instructor where salary<=100000 and salary >=90000;以上两条语句效果一样。

                类似的还可以用not between。

                SQL允许我们用记号(v1,v2,...vn)来表示一个分量值分别为v1,v2,...vn的n维元组,在元组上可以用比较运算符。

                例如(a1,a2)<=(b1,b2)表示a1<=b1且a2<=b2时为真。

        集合运算:并运算(union),交运算(intersect),差运算(except)这三个运算都会自动去除重复。若要保留重复就在运算符后面加上all。

        空值:1.如果算数表达式(+,-,*,/)的任一输入为空,则该算数表达式为空.

           2.将涉及空值的任何比较为unknown

           3.unknown是除true 和false的第三个逻辑值;false and unknown 结果为false。 true or unknown结果为true;

        测试空值:例如找出instructor中salary为空值的所有教师可以写成: select name from instructor where salary is null;

              类似的is not null 写成select name from instructor where salary is not null;为找出instructor中salary为非空值的所有教师

            

             

             

                

            

  • 相关阅读:
    8.10
    今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?
    Gym 100500B Conference Room(最小表示法,哈希)
    CodeForces 438D The Child and Sequence(线段树)
    UVALIVE 6905 Two Yachts(最小费用最大流)
    Gym Conference Room (最小表示法,哈希)
    hdu 2389 Rain on your Parade(二分图HK算法)
    Codeforces Fox And Dinner(最大流)
    zoj 3367 Counterfeit Money(dp)
    ZOJ3370. Radio Waves(2-sat)
  • 原文地址:https://www.cnblogs.com/huxuebing/p/5777950.html
Copyright © 2011-2022 走看看