澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:多表的询问,数据库的骨

2019-08-03 作者:数据库网络   |   浏览(193)

SQL server基础知识

数据库的概述

数据库操作

day06

  回顾:

   bootstrap:

      css框架,html/css/js集于一身,ie 6/7/8男才女貌分外

      开采响应式页面,使用于不一致的上网设备

      使用手续:

        1.导入bootstrap.css

        2.导入jquery.js

        3.导入boostrap.js

        4.bixu设置一个meat标签

        5.须求将内容放入八个布局容器

          .container或者。container-fluid

        前提:

          一行分为12分

        栅格系统:

          分辨率>1200px             使用col-lg-n样式

          1200px>分辨率>992px      使用col-md-n样式

          992px>分辨率>768px           使用col-sm-n样式

          768px>分辨率          使用col-xs-n样式

        隐藏:

          hidden-xs|sm|md|lg        在如何显示屏下埋伏

        组成:

          css样式

          组件  导航条  下拉菜单

          js插件  轮播图   选项卡

////////////////////////////////////////////

        validate插件:校验表单

          jquery 的插件

          使用手续:

            1.导入JQUERY.JS

            2.导入validate.js

            3.在页面加载成功之后,对表单实行校验

             $(function(){
               $("选择器").validate();

             })

            4.在validate方法中编辑校验法则

            $(function(){

              $("选择器").validate({

                 rules:{

                    //格式1: name值:“校验器”

                    //格式2:name值:{校验值:值,校验器:值}

                 },

                 messages:{

                    //格式1: name值:“提醒音讯”

                    //格式2:name值:{校验值:"提醒消息"校验器:"提醒新闻"}

                 }

               });

             })             

            常用的校验器:  

              required:必须的

              min:最小值 minlength:最小长度 range:取值区间  rengelength:长度区间

              equalTo:jquery表明式 判别是不是等于

 //////////////////////////////////  

数据库:

  本质上就是贰个文本系统.通过标准的sql对数码实行curd操作

设置  数据库管理种类:

  数据库管理种类便是二个额软件

大规模的关系型数据库:

  贮存实体与实体之间的关联的数据库(二维表)

  实体:

    用户  订单  商品

  关系:

    用户全部订单

    订单富含物品

  非关系型数据库:存放的是指标(redis)no-sql(not only sql)

  软件名    厂商       特点

  mysql    oracle        开源的数据库 

  oracle    oracle       大型的收款的数据库

  DB2     IBM       大型的收取费用的数据库

  sqlserver   微软      中山学院型的收取金钱的数据库  

  sybase    sybase(powerdesigner)

设置了数据库管理种类的管理器称之为数据库服务器

  服务器:给外人提供服务(软件服务器)

咱俩得以因此正规的sql在服务器创制数据库(database)

有了数据库之后,就在数据库上创表

有了表之后,就足现在里面贮存数据了

/////////////////////

SQL:

  结构化查询语句

  作用:

    管理数据库

sql的分类:

  DDL:数据定义语言

    操作对象:数据库和表

    关键词:create alter drop

  DML:数据操作语言

    操作对象:记录,数据

  DQL:数据查询语言(非官方)   

  DCL:数据调整语言

    操作对象:用户 事物 权限

////////////////////////

  DDL:数据定义语言

    操作对象:数据库和表

    关键词:create alter drop

    操作数据库:

      创建:

        格式:

            create database 数据库名;

      删除:

        格式:

            drop database 数据库名称;

      常用的通令:

        查看全部的数据库 show databases;

      操作表:

         创建表:

            格式:

                create table 表名(

                字段名 字段类型 [约束],

                ......

                );

             例如:

               create table user(

                 id int primary key auto_increment,

                 username varchar(20)

              );

           修改表

            格式:

              alter table 表名 。。。

             修改表名:

               alter table 旧表名 rename to 新表名;

             增多字段:

              alter table 表名 add [column] 字段描述;

              eg:alter table user add password varchar(20);

             修改字段名:

              alter table 表名 change 字段名称 新字段描述;

              eg:alter table user change password pwd varchar(20);

             修改字段描述:

              alter table 表名 modify 字段名称 字段类型 [约束];

              eg:alter table user modify pwd int;

             删除字段:

              alter table 表名 drop 字段名;

              eg:alter table user drop pwd;

        常用命令:

          切换可能步向数据库:use 数据库名称;

          查看当前数据库下的全部表;show table;

          查看表结构:desc 表名;

          查看建表语句:show create table 表名;

//////////////////////////////////////////////////

DML:数据操作语言

  操作对象:记录(数据行)

  关键词:insert update delete

  插入:

    格式:  

     insert into 表名 values(字段值1,字段值2...);

     注意:

      私下认可插入全体字段

      必须保险values前边的故事情节的连串和一一和表结构中的一致

      若字段类型为数字,能够简单引号

     eg:insert into user values(1,'tom');

     格式2:

      insert into 表名(字段名1,字段名2.。。。) values (字段值1,字段值2...);

     修改:

      格式:

        update 表名 set 字段名=字段值,字段名1=字段值1...... [where 条件];

       例如:

        update user set username='jerry' where username ='jack';

      删除:  

        格式:   

          delete from 表名 [where 条件];

       eg:delete from user where id = '2'; 

//////////////////////////////////

DQL:数据查询语言

  关键词首固然:select

  格式:

    select ...... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段 ase|desc

  通配符:*

初步化情形:
  -- 创造商品表
  create table products(
  pid int primary key auto_increment,
  pname varchar(20),
  price double,
  pnum int,
  cno int,
  pdate timestamp
);

insert into products values (null,'泰王国大谷夜套',98,12,1,null);
insert into products values (null,'湖南大枣',38,123,1,null);
insert into products values (null,'新疆切糕',68,50,2,null);
insert into products values (null,'十三香',10,200,3,null);
insert into products values (null,'老干妈',20,180,3,null);
insert into products values (null,'豌豆黄',20,120,2,null);

  eg:

  1.查询全数商品

   select * from products;

  2.查询商品名和货品价位

   select pname,price from products;

  3.询问全部商品都有这么些价格.
    去重操作 distinct
     格式:

    select distinct 字段名,字段名2 from 表名
    select price from products;
    select distinct price from products;
  4.将具有商品的标价 10元举办展现.(小名)
         能够在询问的结果上述进行演算,不影响数据库中的值
      给列起别称 格式:

    字段名 [as] 别名
      select price 10 from products;
      select price 10 新价格 from products;
      select price 10 '新价格' from products;
      select price 10 新 价 格 from products;-- 错误
      select price 10 '新 价 格' from products;
      select price 10 `新 价 格` from products;

//////////////////////////////////

数据类型

java              mysql

byte              tinyint

short              smallint

int               int(★)

long              bigint

char|String           varchar(★)|char

                varchar:可变长度 mysql的白话

boolean              tinyinty|int 代替

float|double            float|double

                 注意:

                 double(5,2):该小数长度为五,小数占2个最大值:999.99  

 

Date-java.sql.Date         date寄放日期

java.sql.Time                                         time 时间

java.sql.Timestamp                               timestamp时间戳 若给定值为null,数据库会把当下的连串时间寄放到数据库中

 

java.sql.Clob(存放字符长文本——小说)   mysql方言(text-4个G内容)

java.sql.Blob(二进制——放电影)    blob

/////////////////////////////////////////

约束

  作用:

    为了有限帮衬数据的有用和完整性

  mysql中常用的牢笼:

    主键约束(primary key)

    独一约束(unique)

    非空约束(not null)

    外键约束(foreign key)

   主键约束:被修饰过的字段独一非空

      注意:一张表只好有二个主键,那个主键能够满含多少个字段  

      形式1:成立表的还要丰裕约束  格式:字段名称 字段类型 primary key

      格局2:建表的还要在封锁区域丰富约束  格式:primary key

          全部的字段表明实现现在,就是i约束区域了

         格式:primary key(字段1,字段2)

         eg :create table pk01(

          id int,

          username varchar(20),

          primary key(id)

          );

       格局3:建表之后,通过修改表结果后加多约束

       

         eg :create table pk02(

          id int,

          username varchar(20),

          );

          alter table pk02 add primary key(字段名1,字段名2);

          alter table pk02 add primary key(id,username);

          

          insert into pk02 values(1,'tom');--成功

          insert into pk02 values(1,'tomcat');--成功

          insert into pk02 values(1,'tomcat');--退步--插入大同小异的

  独一约束:

    被改换过的字段唯一,对null不起效率   

      形式1:成立表的还要加上约束  格式:字段名称 字段类型 unique

     

      格局2:建表的还要在封锁区域丰盛约束  格式:unique

          unique(字段1,字段2....)     

       情势3:建表之后,通过修改表结构

         alter table 表名 add unique(字段1,字段2);--增多的一齐独一

   非空约束(not null)

     特点:被修饰过的字段非空

////////////////////////////

truncate 清空表

    格式:

      truncate 表名;干掉表,重新创造一张空表

    和delete from 区别

      delete属于DML语句 truncate属于DDl语句

      delete逐一删除  truncate干掉表,重新创制一张空表

auto_increment 自增

    要求:

      1.被修饰的字段类型支持自增-int

      2.被修饰的字段必须是三个key 一般是primary key

 

    create table ai01(

    id varchar(10) auro_increment

 );--错误 Incorrect column specifier for column 'id'

 外键约束:

  为了保险数据的得力和完整性,增加约束(外键约束)

  在多表的一方加多外键约束

    格式:

      alter table 多表名字 add foreign key (外键名称) references 一表名称(主键)

     例如

       alter table orders add foreign key (user_id)  references user(id);

    增添了外键约束后有如下特点:★

      1.主表中不可能去除从表中已引用的数据

      2.从表中不能够加多主表中不设有的数码

 

    开辟中拍卖一对多:★

      在多表中增多二个外键,名称一般为主表的称谓_id,字段类型一般和主表的慢慢类型保持一致

      为了保险数据的实惠和完整性,在主表的外键上增添外键约束就能够

//////////////////

多表查询:  

    内连接:

      展现的内连接

        select a.*,b.*  from a join b on 两次三番条件

      隐式外接连

        select a.*,b.* from a,b where 连接条件

     外连接:

       左外连接:(展现内接连加left)

        select a.*,b.* from a left join b on 连接条件

        体现a表全数数据,根据规范关联合检查询b表,知足条件展现,不满意以null体现

    给表起小名:

    表 【as】 别名

一、基础知识

1.数据库的功效:旅馆,存储数据。 

下边介绍部分关于从数据库创造到利用的一些粗略的艺术;

  (1)、存款和储蓄结构:数据库->表->数据

2.关系型的数据库,保存实体与实业之间的关系。 

创制一个名为mydatabase数据库: create database mydatabase ;

  (2)、管理数据库

3.大范围的数码库 

能够用以下地命令来查阅创立的数据库是或不是成功: show databases ;

    扩展:create database 数据库名称

* Oracle MySQL SQLServer DB2 

变动数据库名字 : alter databases  Hdatabase ;

    删除:drop database 数据库名称

MySQL数据库的装置和卸载

转移数据库mydatabase的字符集 : alter database mydatabase charset GBK ;

    查询:select name from master..sysdatabases

1.看笔记 

步向数据库: use mydatabase ;

    修改:alter database 数据库名称(在 sql server 中修改与数据库关联的文本和文件组。在数据库中增添或删除文件和文件组、更改数据库或其文件和文件组的属性)

2.MySQL密码重新恢复设置。文书档案 

用下边包车型客车指令来查看该数据库中的表: show tables ;

  (3)、管理表

MySQL数据库的定义

                                表操作

    选拔数据库:use 数据库

1.数据库的服务器 – 四个数据库 – 每四个数据库中设有的八个表结构 – 创设表结构的时候必要内定字段 – JavaBean中的属性是顺应的 – 表结构中的一行数据对应的是二个JavaBean实体 

用下边包车型地铁通令来创立表:create table student (

    扩张:create table 表名(字段1 字段类型,字段2 字段类型,......);

SQL语言的分类

                                      name varchar(10) , 

    删除:drop table 表名

1.SQL言语的概述 

                                     gendervarchar(10) ,

    修改:

2.非进度性的语言:不借助于上一条恐怕上几条语句,一条语句就能够有施行的结果。 

                                     sno    int    primary key(id)

      加多字段:alter table 表名 add 字段名 字段类型

3.SQL的分类: 

                                    )charset utf8;

      删除字段:alter table 表名 drop column 字段名

* DDL 数据定义语言 create alter drop 

用下边包车型客车授命来检查表的创设是还是不是中标: show tables;

      修改字段类型:alter table 表名 alter column 字段名 字段类型

* DML 数据操作语言 delete insert update 

翻开该表结构,表中字段的消息: desc 表名 ;        describe 表名;       show columns from  表名;

      修改字段名称:exec sp_rename '表.原字段名称','新字段名称','column'

* DCL 数据调控语言 

修改表名: rename命令用于修改表名。  rename命令格式:rename table 原表名 to 新表名;

      修改表的称谓:exec sp_rename '原表名称','新表名称'

* DQL 数据查询语言 select 

                   alter  table  旧表名  rename  新表名;         alter table student  rename  my_student;

    查询:select name from sysobjects where xtype = 'u'

数据库的CU中华VD

修改字段,字段操作相当多:新增加(add)、修改(modify)、重名(change)、删除(drop)

  (4)、管理数据

1.创办数据库 create database 名称; 

--给学员表扩充ID放到第多少个职分。                          altertable  表名  add  字段名  数据类型[位置];

    扩展数量:insert into 表(字段1,字段2,...) values (值1,值2,...)

2.修改数据库 alter database 名称 character set ‘utf8’ collate ”; 

alter  table my_student add  id int first;

    删除数据:delete from 表名 where 条件

3.剔除数据库 drop database 名称; 

---将学员表中的number学号字段形成固定长度,且放到第二人。   alter table 表名  modify  字段名  数据类型  [位置]; 

    修改数据:update 表名 set 字段1=值1,字段2=值2,... where 条件

4.查看数据库 show databases; show create database 名称; use 名称; 

alter  table  my_student  modify  number  char(10)  after id;

    查询数据:

表结构的CUPRADOD

---修改学生表中的gender字段为sex。alter table 表名  change  旧字段名  新字段名  数据类型 ;alter table my_student  change  gender  sex  varchar(10);

      全部字段:select * from 表

1.创建表 

---删除学生表中的字段age。                                alter  table  表名   drop   字段名;    

      钦定字段:select 字段1,字段2,... from 表

create table 名称( 

alter  table  my_student  drop  age;                                       

      内定小名:select 字段1 as 外号1,字段2 as 别称1,... from 表

字段 类型(长度) 约束, 

去除数据表: drop  table  表名1,表名2,……;         三次性删除多少个表

      去重:select distinct 字段 from 表

字段 类型(长度) 约束 

数码操作

      条件查询:

); 

---新扩大数据(插入全表字段数据) insert into my_student values('Jim','female',1106101);

        逻辑条件:and(与)or(或)

2.类型 

---新扩大数据(内定字段列表)   insert into  my_student(number,sex)  values(1106,'male');

          select * from 表 where ... and/or ...

char 固定长度 varchar 可变长度 

澳门新萄京官方网站:多表的询问,数据库的骨干使用格局。---查看全部的多少  select  * 

        比较基准:>,<,>=,<=,=,!=,<>(不等于),between and

int bigint float double 

                  from  表名

        判空条件:

bit 

                  [where 条件];

          判断null:is null/is not null

date time datetime 传Null 便是null timestamp 取当前的时日

---更新数据    alter是操作数据库,表,字段。 update更新数据

          推断空字符串:='',!='',<>''

3.翻看和删除表结构 

--更新名字叫吉姆的性别。      update  表名  set  字段 = 值[where 条件];

          模糊条件:like

* show tables; 

update my_student set sex = 'female' where name = 'Jim';

            '%':替换率性个字符

* show create tables 名称; 

---删除数据 

            '_':替换一个字符

* desc 名称; 

--删除表中性别男的      delete  from  表名  [where  条件];

              select * from 表 where 字段 like '%询问字符%'

* drop table 表名;

delete  from my_student  where  sex = 'male';

          分页查询:      

4.修改 

粤语数据难点本质是字符集难点,set names  gbk;   一定要设置字符集。

            @p_pagesize int,//页面数量

* alter table 表名 add 字段 类型(长度); 

外键:假如一张表中有叁个字键段(非主键)指向别的一张表的主键,那么将该字段称之为外键。

            @p_currentPage int//当前页

* alter table 表名 drop 字段; 

主键难题

            declare @string varchar(3000)

* alter table 表名 modify 字段 类型(长度); 

主键直接在字段之后,能够有四个字段作为主键,那样的主键称为复合主键。

            if(@p_currentPage=1)//第一页

* alter table 表名 change 旧字段 新字段 类型(长度) 

从不主键,追加主键    alter  table  my_database  modify  course  char(10)  primary key;

            begin

* rename table 表名 to 新表名; 

从未有过主键,追加复合主键  alter table  my_student  add  primary key (sno,cno);

              set @string = 'Select top ' cast(@p_pagesize as char(20)) '* from 表名 where 条件

数据的CURD

立异主键 & 删除主键  alter  table  表名 drop primary  key;

            end

1.增多数据 

范式:终极指标为了减小数量的冗余,凡是通过涉及寻觅出来的多少,坚决不再另行存款和储蓄。

            else//不是第一页

* insert into 表名 (字段1,字段2 ) values (值1,值2) 

首先范式:在设计表存储数据时,数占领所原子性。

            begin

* insert into 表名 values (值1,值2,,值3)

如表(姓名,性别,教课时间(开首,停止))  此表的批注时间仍可拆分,不具备原子性。

              set  @string = 'Select top ' cast(@p_pagesize as varchar(20)) '* from 表名where 条件and 表.字段 not in (select top '                    cast(((@p_currentPage-1)*@p_pagesize) as varchar(20)) '字段 from 表名where 条件

2.改造数据 

消除办法(姓名,性别,开首,甘休)

            end

* update 表名 set 字段=值 , 字段=值 where 条件;

第二范式:消除表设计出现的局地重视,部分依赖正是存在字段重视主键中有个别字段(主键的一部分)。只要不设有复合主键,表的陈设就肯定满意2NF

            exec(@string);

3.去除数据 

如一张表中有(助教,性别,班级,体育场面,带课时间,起始时间,甘休时间)   因为助教无法作为主键,须求组合教授班级能力作为主键(一个名师在三个班只带二个品级的课,性别并不借助班级,只依赖教师;体育场地不借助于助教,只依附班级,因而出现了性别和体育场面重视主键中的一有些)

          排序查询:order by asc/desc

* delete from 表名 where 条件; 

缓慢解决方案: 能够将性别与教师单独成表,班级与体育地方也单身成表,以此撤销复合主键。

            asc:正序;顺序

* truncate 表名; 

有人也感觉能够应用逻辑主键,比方扩张IDP。那样实在能够吧?  无法,如下,会现出传递重视。

            desc:反序;倒序

数码的询问

其三范式:理论上讲,应该一张表中的持有字段都一贯正视主键,假使表设计中设有三个字段,并不间接注重主键,而是经过有些非主键字段依赖,最后落实依据主键,如一张表中有(主键IDP,教授,性别,班级,教室,带课时间,起初时间,甘休时间)  性别依赖于教师,教师依赖于主键IDP;体育场合正视班级,班级正视主键IDP。性别和教师的资质都存在传递重视。

          分组查询:group by 字段

1.语法: 

缓和方案:将设有传递依赖的字段,以及借助的字段本人单独抽取,产生二个单独的表,然后在须要相应的新闻的时候,使用相应的实体表的主键加进去。一句话正是实业单独建表。

          分组后筛选:having

* select * | 字段1,字段2,,字段3 from 表 where 条件 order by 字段 asc/desc; 

查询数据完全语法

二、数据约束

* 查询的字段扶助运算 

select 字段名/*

多少约束:对用户表操作进行封锁

* where条件的号子 

from  数据源

  (1)默认值:

* <> 不等于 

[where 条件子句]

    功能:当用户对应用私下认可值的字段不插入值的时候,就能够选用暗许值

* in 范围 

[group by 子句]

    注意:

* like 模糊查询 like ‘张_’ ‘%张%’ 

[having 子句]

      (a)对于默许值字段插入null是足以的

* and or not 

[order by 子句]

      (b)对于默许值字段可以插入非null

* between and

[limit 子句];

    创建:

2.晤面函数:都是操作列的。 

select *  from my_student; 

      (a)建表:

* count – 计算 

---去重

         create table temp_table

* sum – 求和 

select distinct *  from  my_student;

         (id int,

* avg – 平均值 

--插入数据

         name varchar(10),

* max – 最大值 

insert into my_student values(null,'itcast01','张三','男'),(null,'itcast02','李四','男'),(null,'itcast03','王五','女'),(null,'itcast03','男');

         address varchar(50) default '湖南哈里斯堡')

* min – 最小值 

--字段别称

      (b)语句:

前几天内容:MySQL数据库(多表的查询)

select id,number as 学号,name as 姓名, sex 性别 

         alert table 表名 add constraint 暗中认可名字(任性) default('私下认可值') for 字段

分组查询

from my_student;

  (2)非空:

1.分组查询: 

where子句

      成效:限制字段,必须赋值

* select * from stu; – 查询全体的学生的新闻。暗中同意分成一组。 

规律:where是并世无两一个一贯从磁盘获取数据的时候就伊始判别的标准化:从磁盘收取一条记下,起首张开where判定,判定的结果倘若创立保存到内部存款和储蓄器,反之丢弃。

      注意:

* 能够接纳group by sex 来拓展分组。 

---找学生id为1,3,5的学生

        (a)非空字段必须赋值

* 条件过滤的机要字 having 一般都选取在分组语句的尺度过滤。

select  *  from  my_student  where id =1 || id =3 || id =5;

        (b)非空字段不能够赋null

2.练习 

或者select * from my_student where id in(1,3,5);

      创建:

create database day16; 

group by  字段 [asc/desc];   分组  依据有个别字段举行分组,一样的放一组,差别的分到分歧的组。总计的是数额,不是记录

        (a)建表:

use day16; 

--按性别分组

          create table temp_table

create table orders( 

select * from my_student group by sex; 那是绝对大错特错的,分组是为了计算数据,按分组字段进行数据计算

          (id int not null,

id int, 

SQL提供了一多级总括函数

          name varchar(10),

product varchar(20), 

Count();  总结分组后的记录数,每一同样的组有多少行记录

          address varchar(50) default '江苏奥马哈')

price float 

马克斯();   总括每组最大的值

        (b)语句:

);

Min();   总结每组最小的值

          alert table 表 alert column 字段名称 字段类型 not null

insert into orders(id,product,price) values(1,'电视',900);

Avg();   总计每组的平均值

  (3)唯一:

insert into orders(id,product,price) values(2,'洗衣机',100);

Sum();   总括每组的和

澳门新萄京官方网站:多表的询问,数据库的骨干使用格局。      独一键分为主键(主键索引)和独一索引(unique索引)

insert into orders(id,product,price) values(3,'洗衣粉',90);

---身体高度高矮,平均年龄,和总年龄

      效用:对该字段的值不可能重复

insert into orders(id,product,price) values(4,'洗衣机',100);

select sex,count(*),max(height),min(height),avg(age),sun(age)   from my_student  group by sex;

      注意:

insert into orders(id,product,price) values(5,'洗衣粉',90);

只顾选择group by却不利用总结函数,没意义!

        (a)独一字段可以插入null

insert into orders(id,product,price) values(6,'洗衣粉',90);

多字段分组:先遵照三个字段进行分组,然后对分组后的结果再行依据别的字段分组。

        (b)独一字段只能插入二个null

------ --------- -------

having子句

      创建:

| id  | product | price |

与where子句一样实行规范化剖断,思维:为啥是group by……having…… 并不是group by……where???

        (a)建表:

------ --------- -------

进行多少计算时,是数码进入内存之后,会进展分组-》总结-》having条件推断。而where是针对性从磁盘读取数据时举办决断,此刻还没分组,实行总计就判别了。所以错误!!!

          create table student

|    1 | 电视    |  900 |

---求出装有班级人数大于等于2的学生人数

          (id int unique,

|    2 | 洗衣机  |  100 |

order by 子句

          name varchar(10))

|    3 | 洗衣粉  |    90 |

order by依照某些字段举办升序或降序排序,信赖核对集

        (b)语句

|    4 | 洗衣机  |  100 |

中央语法: order by 字段名 [asc/desc];  asc升序 可不写      desc降序

          create unique clustered index 约束名 on 表名(字段名)

|    5 | 洗衣粉  |    90 |

 

  (4)主键:

|    6 | 洗衣粉  |    90 |

limit子句是一种范围结果的说话

    作用:非空,唯一

------ --------- -------

1)用来界定数量

    注意:

* 对订单表中货品归类后,显示各种商品的总价(按着商品的名号举行分组,查询的是每一组的总价)

--查询学生前七个   select * from my_student limit 2;

      (a)平常境况下,每张表都会设置一个主键字段用以标志表中的每条记下的独一性。

    select product,sum(price) from orders group by product;   

2)限制早先地方  limit 初始地方,长度

      (b)建议不用挑选表的隐含业务含义的字段作为主键,提议给每张表独立设计贰个非业务含义的id字段。

    select product,sum(price),count(*) from orders group by product;       

--查从编号4初叶,询找多少个学生

    创建:

* 查询购买了几类商品,并且每类总价超过200的货品

select * from my_student limit 4,2;

      (a)建表:

    select product,sum(price) from orders group by product having sum(price) >200;

内连接,外接连,自然连接,交叉连接

          create table student

    select product,sum(price) from orders where price > 95 group by product having sum(price) > 300;

内一而再,从左表中抽取每一条记下,和右表中具备的记录进行匹配,相配必须是左表中与右表中有些条件一致,最后会保留结果,不然不保留。

          (id int primary key,--主键

查询语句的逐一

着力语法:  左表 [inner] join 右表  on 左表.字段 = 右表.字段;

          name varchar(10))

select … from … where … group by … having … order by 

select * from my_student inner join my_class on my_student.C_id = mu_class.id;

      (b)语句:

数据库的备份和东山再起

左外连接:左表为主,然后每条记下与右表进行延续,不管能还是无法相配的上,左表都会保留。能同盟,右表某条记下保留,无法相配,某条记录置为NULL,最后记录数至少相当多于左表已部分记录。

          第一:先安装字段为null: alter table 表名 alter column 字段名 字段类型 not null

1.借使运用工具来拓展备份。 

基本语法:  左表  left join  右表  on  左表.字段 = 右表.字段;

          第二:设置主键:alter table 表名 alter constrant 主键名(大肆) promary key(主键字段)

单表的羁绊(主键)

a表     id   name      b表     id   job   parent_id

  (5)自增长

1.束缚:保障数据的完整性。 

1   张3                   1     23     1

    功效:自动递增

2.主键约束(重要) 

2   李四                 2     34     2

    注意:一张表中不能够有四个恐怕多少个标识列

* 假诺把某部字段证明成主键了,有如下的风味: 

3   王武                 3     34     4

    创建:

* 唯一 

a.id同parent_id   存在涉嫌

      (a)建表:

* 非空 


          create table student

* 被引用 

 1) 内连接 

          (id int identity(1,1) primary key,--主键,自增加,从1起来,每趟扩张1

* 表明主键,使用首要字 primary key 

select   a.*,b.*   from   a   inner   join   b     on   a.id=b.parent_id

          name varchar(10))

3.对主键进行测验 

结果是

      (b)语句:

create table person( 

1   张3                   1     23     1

          alter table 表名 add 列名 int identity(1,1) NOT NULL--扩充一列自增

id int primary key, 

2   李四                  2     34     2

  (6)主键:   

name varchar(50) 

 2)左连接  

    效率:约束两张表的数据

); 

select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id

    出现三种表的情状:化解多少冗余高问题, 独立出一张表。

insert into person values (1,’美美’); 

结果是

    注意:

insert into person values (2,’小凤’); 

1   张3                   1     23     1

      (a)被束缚的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!

insert into person values (3,’如花’);

2   李四                  2     34     2

      (b)主表的参照字段通用为主键!

4.主键自动增进 

3   王武                  null

      (c)添增多少: 先增加主表,再加多副表

* 把主键的值交给数据库实行保证了。不用我们去管理了。 

3) 右连接   

      (d)修改数据: 先修改副表,再修改主表

* 使用主要字:auto_increment 

select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id

      (e)删除数据: 先删除副表,再删除主表

* 主键的体系:int bigint

结果是

    创建:

drop table person;

1   张3                   1     23     1

      (a)建表:

create table person(

2   李四                  2     34     2

        -- 部门表(主表)

    id int primary key auto_increment,

null                        3     34     4

        CREATE TABLE dept(

    name varchar(50)

4) 完全连接 

        id INT PRIMARY KEY,

);

select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id

        deptName VARCHAR(20)

insert into person values (null,'美美'); 

结果是

        )

insert into person values (null,'小凤');

1   张3                  1     23     1

        -- 修改职员和工人表

insert into person values (null,'如花');

2   李四                 2     34     2

        CREATE TABLE employee(

delete from person where id = 3;

null                   3     34     4

        id INT PRIMARY KEY,

insert into person values (null,'如花');

3   王武                 null

        empName VARCHAR(20),

独一和非空约束

        deptId INT,-- 把机构名称改为单位ID,

1.独一约束:表明值是并世无双的值。但是允许为空。 

          -- 声美素佳儿个外键约束

* unique 

        CONSTRAINT 外键名称 FOREIGN KEY(外键) REFERENCES 主键表(主键id)

2.非空束缚:申明值不可能是空的。 

        )

* not null 

      (b)语句:

外键约束(多表)

        alter table 表 add foreign key(表外键) references主键表(主键id)

1.功用:保障数据的完整性。 

三、多表链接查询

2.效仿例子 

  (1)外链接

create table dept( 

    外连接分为:左链接、右链接、完全外链接

did int primary key auto_increment, 

    (a)左链接:left join 或 left outer join

dname varchar(50) 

       用法:最少两张表,A表和B表

);

        Select A.字段 from A left join B on A.id = B.id

create table emp(

       左外连接包括left join左表全体行,借使左表中某行在右表未有相配,则结果中对应行右表的部分全部为空(NULL).

    eid int primary key auto_increment,

    (b)右链接 right join 或right outer join

    ename varchar(50),

       用法:最少两张表,A表和B表

    sal double,

        Select A.字段 from A right join B on A.id = B.id

    dno int

       右外接连包含right join右表全数行,假设左表中某行在右表未有匹配,则结果中对应左表的部分全体为空(NULL)。

);

    (c)完全外接连 full join 或 full outer join

insert into dept values (1,'研发部');

       用法:最少两张表,A表和B表

insert into dept values (2,'人事部');

        Select A.字段 from A full join B on A.id = B.id

insert into emp values (null,'大鹏',15000,1);

        完全外接连富含full join左右两表中具有的行

insert into emp values (null,'熊大',5000,1);

        假设右表中某行在左表中未有匹配,则结果中对应行右表的一对全部为空(NULL)

insert into emp values (null,'小凤',5000,2);

        如若左表中某行在右表中一贯不相称,则结果中对应行左表的有的全部为空(NULL)。

insert into emp values (null,'美美',6000,2);

  (2)内连接

* 即使直白删除到研发部门

     内连接 join 或 inner join

    delete from dept where did = 1;

     用法:最少两张表,A表和B表

3.就能够利用外键实行封锁,保存数据库的完整性。 

     Select A.字段 from A full join B on A.id = B.id

* 注明外键,使用foreign key申明外键。 

     inner join 是相比运算符,只回去符合条件的行。
     此时一定于:select * from A,B where A.ID=B.ID

* 修改表,给emp表加多的外键(把dno的字段增添成外键) 

* alter table emp add foreign key (dno) references dept (did);

4.假若已经包含外键的关联了,就不可能去除部门了。 

delete from dept where did = 1;

5.在开创表结构的时候,能够注解外键 

create table emp( 

eid int primary key auto_increment, 

ename varchar(50), 

sal double, 

dno int, 

foreign key (dno) references dept (did) 

); 

多表的计划性

1.一对多的建表原则:在绝超越五分之三的表中,新扩大加七个字段,作为该表的外键。指向一方表的主键。(外键的值只好从一方表的主键中收获)

2.多对多的建表原则:成立贰个中间表,中间表中足足含有四个字段,那多少个字段作为外键,指向多对多原表的主键。

3.一定的建表原则:例子:二个厂家都对应叁个地点。 

* 创造多个百货店的表,创造七个地方的表。 

* 主键对应:公司的主键值和地址表的主键值是一致的。

4.JavaWeb课程最终4天,有二个系列。购物的网址。 

* 用户 订单 商品 分类 

多表的询问

1.打探笛Carl积。查询数据是不准确的。笛Carl积:五个结果的乘积。 

A B 

澳门新萄京官方网站,aid aname bid bname aid 

a1 a11 b1 b11 a1 

a2 a22 b2 b22 a2 

b3 b33 a1

select * from A,B; 结果:正是笛卡尔积。 

a1 a11 b1 b11 

a1 a11 b2 b22 

a1 a11 b3 b33 

a2 a22 b1 b11 

a2 a22 b2 b22 

a2 a22 b3 b33 

多表查询(准确的数量)之内连接

0.前提条件:部门和职工表例子,两张表需求存在涉嫌,正是外键的涉嫌。 

1.平时内链接 

* 语法:inner join … on 条件 

* 例子: select * from dept inner join emp on dept.did = emp.dno;

2.隐式内接连(开拓中运用最多的) 

* 语法:去掉inner join关键字 

* 例子:select * from dept,emp where dept.did = emp.dno; 

* 使用小名:select d.dname,e.ename,e.sal from dept d,emp e where d.did = e.dno; 

多表查询之外链接

0.前提条件:部门和职工表例子,两张表必要存在涉嫌,正是外键的关联。 

1.左外链接 

* 语法:关键字:left outer join … on 条件; 

* 例子:select * from dept left outer join emp on dept.did = emp.dno; 

2.右外链接 

* 语法:关键字:right outer join … on 条件; 

* 例子:select * from dept right outer join emp on dept.did = emp.dno; 

内接连和外链接的数额的界别

1.向机构中增多一些数据 

insert into dept values (3,’牛婴孩部’); 

insert into dept values (4,’扯淡部’); 

2.向职工表中增添一些数据 

insert into emp values (null,’陈冠希’,16000,null); 

insert into emp values (null,’张柏芝’,26000,null);

3.张开测量检验 

* 内连接:select * from dept,emp where dept.did = emp.dno; 

* 左链接:select * from dept left join emp on dept.did = emp.dno; 

* 向链接:select * from dept right join emp on dept.did = emp.dno;

4.计算:内延续查询的结果尚未生成,查询的是有提到的多少。左链接,看何人是左表,把左表中负有的多寡总体都询问出来和有关联的数据。右链接,看何人是右表,把右表中持有的数量总体都询问出来和涉嫌数据。 

5.看图 

子查询

1.一条SQL语句不可能查询出结果,供给依据几条SQL语句的询问。 

2.询问出塞尔维亚语战表当先荷兰语平均分的同班? 

* 先查德文的平均分 

* 再查乌Crane语的实际业绩(大于平均分)

use day15;

select name,english from stu where english > (select avg(english) from stu);

3.子查询的标识 

< 小于 > 大于 

<= 小于等于 >=大于等于 

= 等于 <>或!= 不等于 in 范围

any :select * from stu where english >any (5,6,7) 大于范围非常小的值 

all :select * from stu where english >all (5,6,7) 大于范围最大的值 

练习

查看熊大所属的单位名称和职工名称? 

* 查询:部门名称和职员和工人的名称 

* 表:部门表和职员和工人表 

* 条件:熊大的名号 where ename=’熊大’ 内连接 where d.did = e.dno

* 语句:select d.dname,e.ename from dept d,emp e where d.did = e.dno and e.ename='熊大';

总括各种机构的人口(根据机构名称总结) 

* 查询:部门的人数,部门名称 

* 表:部门表和职员和工人表 

* 条件:内连接 where d.did = e.dno 分组:group by d.dname

* 语句:select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;

计算单位的平均工资(按单位名称总结) 

* 查询:部门的平均薪给,部门名称 

* 表:部门和职工表 

* 条件:内连接 where d.did = e.dno 分组:group by d.dname

* 语句:select d.dname,avg(e.sal) from dept d,emp e where d.did = e.dno group by d.dname;

总结部门的平均薪金大于集团平均薪俸的机关 

* 查询:部门 

* 表:职员和工人表和单位表 

* 条件:内连接 where d.did = e.dno 分组:group by d.dname 条件:部门的平分 > 集团的平均报酬

* 语句:select d.dname,avg(e.sal) from dept d,emp e where d.did = e.dno group by d.dname having avg(e.sal) > (select avg(sal) from emp);

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:澳门新萄京官方网站:多表的询问,数据库的骨

关键词: