/*创建*/
/*对象级别*/
create database 数据库名 /*创建数据库*/
drop database 数据库名 /*删除数据库*/
create table 表名 /*创建表*/
drop table 表名 /*删除表*/
create view 视图 /*创建视图*/
create function 函数名 /*创建函数*/
create procedure/proce 存储过程 /*创建存储过程*/
create trigger 触发器/*创建触发器*/
create login 登录 /*创建登录*/
create user /*创建用户*/

/*记录级别*/
表的行:记录
表的列:属性

/*数据库文件*/
1.主数据库文件
    只能有一个,必须有 
    后缀名:.mdf
2.次数据库文件
    可以有多个,可以没有 
    后缀名:.ndf
3.日志文件
    可以有多个,必须有
    后缀名:.ldf

/*一、创建数据库*/
create database 数据库名
on primary(
    /*逻辑文件名*/
        name=studb,
    /*存储路径*/
        filename='D:\sql\studb.mdf',
    /*初始化大小*/
        size=100,
    /*数据库文件最大值,unlimted不限制大小*/
        maxsize=200,
    /*文件增长*/
    /*1,绝对大小增长2.百分比增长*/
        filegrowth=5%
)
log on(
    /*逻辑文件名*/
        name=studblog,
    /*存储路径*/
        filename='D:\sql\studblog.ldf',
    /*初始化大小*/
        size=100,
    /*数据库文件最大值,unlimted不限制大小*/
        maxsize=200,
    /*文件增长*/
    /*1,绝对大小增长2.百分比增长*/
        filegrowth=5%
)

/*创建数据库bookDB,初始大小150MB,逻辑名book,不限制文件大小,主数据库文件存在D盘的bookdb下的bookdata.mdf,每次增长25%,日志文件同一目录,逻辑名和文件名都加上log,日志文件最大值不超过200MB,日志每次增长12MB*/
create database bookDB
on primary(
    name=book,
    filename='D:\bookdb\bookdata.mdf',
    size=150,
    maxsize=unlimited,
    filegrowth=25%
)
log on(
    name=booklog,
    filename='D:\bookdb\bookdatalog.ldf',
    size=150,
    maxsize=200,
    filegrowth=12
)

select * form stu where name='张三';
/*几个关键字的用法*/
	use 数据库名
	exec 执行存储过程
	go 执行某一条语

/*修改数据库(对象级别)*/
	/*创建*/
   	 create database 数据库名
	/*修改*/
   	 alter database 数据库名
    	    add:增加
    	    modify:修改
    	    remove:删除
	/*删除*/
 	   dorp database 数据库名
        
/*修改数据库(记录级别)*/
	/*插入*/
    	insert xxx into xxx;
	/*修改*/
    	update xxx from xxx;
	/*删除*/
    	delete from xxx;
    
/*创建数据库studentDB,按系统默认参数生成*/
    create database 创建数据库studentDB
    
/*删除数据库marketinfo的数据库文件markndf*/
    alter database marketinfo
    remove file markndf

/*为教学管理数据库增加容量,原来的数据库文件JXGL.mdf的初始分配空间3MB至10MB*/
    alter database JXMG
    modify file(
        name=JXMG,
        size=10
    )
    
/*数据库重命名,使用系统的存储结构sp=systeam proceure*/
    sp_renamedb '原数据库名','新数据库名'

/*把学生数据库studentDB改成stu_DB*/
    exec sp_renamedb 'studentdb','sru_DB'
    
/*变量*/
	@:局部变量
	@@:全局变量
	
/*分离*/
	sp_detach_db '数据库名'
	/*分离teaching数据库,并将skipchecks设为ture*/
		exec sp_detach_db 'teaching','ture'

/*附加*/
	/*方式1:T-SQL语句*/
		create database 数据库名
		on (
			filename='C:\sql\sru.mdf'
		)
		for attach
	/*方式2:使用系统储存过程*/
		/*单一文件附加*/
			exec sp_attach_simple_file_db
				@dbname='数据库名',
				@physname='C:\data\teaching.mdf'
				
		/*多文件附加,中间加逗号'*/
			exec sp_attach_db
				@dbname='数据库名',
				@filename='C:\data\teaching.mdf',
				@filename='C:\data\teaching_log.ldf'

/*附加teaching数据库到当前服务器*/
	exec sp_attach_db
		@dbname='teaching',
		@physname=

/*备份*/
	sa:system_administrator
	dbo:da_owner
	/*创建一个备份设备*/
		exec sp_addbackupdevice '设备类型','逻辑名','路径'
			/*设备类型*/
				tape:磁带
				DISK:硬盘
				
	/*1.完全数据库备份*/
		backup database 数据库名
		to DISK='\路径\xxx.bak'
		/*附加条件*/
			/*设置名称*/
				with name=名称
			/*是否覆盖*/
				with init | noinit
			/*设置密码*/
				password='123456'
			/*设置日期*/
				date='日期'
			/**/
			
				/*把bookDB数据库备份到硬盘D盘下的back文件夹下的bookdb.bak,追加到原来备份后面*/
				backup database bookDB
				to DISK='D:\back\bookdb.bak'
				with noinit
					
	/*2.差异数据库备份*/
		backup database 数据库名
		to DISK='\路径\xxx.bak'
		with differential
		/*附加条件*/
			/*设置名称*/
				with name=名称
			/*是否覆盖*/
				with init | noinit
			/*设置密码*/
				password='123456'
			/*设置日期*/
				date='日期'
				
				/*备份数据库stu,到C盘sql文件夹,文件名自定义,差异备份,覆盖原文件*/
				backup database stu
				to disk='C:\sql\back.bak'
				with differential
				with init
	/*3.文件或文件组备份*/
	    backup database 数据库名
	    
	/*4.事务日志备份*/
	    backup log 数据库名
	    to 设备
	    with 
	
/*还原,只能还原备份的数据*/
    restore database 数据库名
    from disk='路径\xxx.bak'
    with 
        name=''
        deccription=''


第二节课 
一、数据类型
1.数值类型:不用单引号
    整数
        int:整形,有正负之分
        smallint:短整型
        bit:比特 0或1
    小数
        float(n):浮点型,n:数的总长
        double:
        real:实型,小数
        numeric(p.s):p:数的整体位数,s:小数位数
        money:货币
        
2.字符类型
    字母,汉字,特殊字符
    chat(n):定长字符,n:字长多少位
        身份证:char(18)
        手机号:chat(18)
    varchar:变长字符类型
    nchar()
    nvarchar()
    ASCII码:8位二进制
    bit:0或1
    byte:字节 8位
    word:2byte 16位 汉字是2字节
    1KB=1024byte
    1MB=1024KB
    1GB=1024MB
    
3.日期类型
    date:YYYY-MM-DD
    time:HH:MM:SS
    datetime:YYYY-MM-DD HH:MM:DD
    datetime2:
    getdate():获取当前日期
    year(参数):返回年,返回数值类型
    month(参数):返回月,返回数值类型
    day(参数):返回日,返回数值类型
4.其他类型
    boolean:布尔值:true|false
    binary:二进制
    image:图片设计
    text:文本类型

二、约束
1.实体约束

2.参照约束
3.自定义约束

1.空值约束
    null, not null
2.主键:关系数据库,能唯一区分其他记录的属性的组合
    关键字:primary key
    行:记录
    列:属性
    
    属性
        主键必须唯一
        不允许空值
3.外键:另一张表的主键,用于保持两张表之间的数据一致
    关键字:foreign key(本表属性名) references 另一张表名(主键)
4.自增长约束
    identity(m,n):m初始值,n:步长
    只能是整形,主键,系统自动管理,不允许用户修改
5.唯一性
    unique:
6.用户自定义约束:具体应用中要符合常理
    check(表达式):
    sex in():括号里面是并列元素,同一种数据类型,有逗号分隔,或者关系
7.缺省值
    default(值):默认值
    
三、创建表
语法:
    create table 表名(
        属性1 数据类型 约束1 约束2 约束3,
        属性2 数据类型 约束2 约束3 约束1,
    )

约束:
行级约束:只针对一个属性,可以写在属性同一行
表级约束:至少与两个或两个以上属性关联,必须用逗号分隔另起一行写约束,外键
/**/
create table Employees
(
    Emp_id int not null primary key indentity(1,1),
    Emp_name varchar(20) not null unique,
    Sex char(2) check(Sex='男' or '女'),
    Title varchar(50) default('员工'),
    Wage float(2) check(Wage > 0),
    IdCard varchar(20) not null,
    Dep_id int,
    foreign key(Dep_id) references department(DEP_id)
)
第三节课
一、constraint关键字
    constraint 主键名
    (
        testid int,
        test varchar(20),
        constraint pk_test primary key(test_id)
    )
    
/*修改表*/
 alter table 表名
    add:增加
    alter column:修改
    drop column:删除

/*在学生表中增加字段tele*/
alter table 表名
    add tele char(11) NOT NULL
/*修改tele字段为tel*/
alter table 表名
    alter column tele tel
/*删除表字段*/
alter table 表名
    drop column tel
    
/*修改数据库名称*/
exec sp_renamedb '旧名称','新名称';
/*修改表名*/
exec sp_rename '旧表名','新表名';
/*修改列名*/
exec sp_rename '表名.列名','新名','column';


二、关系数据库中表的记录
/*学生信息表如下*/
    create table stuinfo
    (
        Sno int primary key,
        sname varchar(50) unique,
        birthday date NOT NULL,
        CID int,
        sex char(2) check(sex='男' or sex='女'),
        dept varchar(20),
        dele char(11) NULL,
        homeland varchar(50) NULL,
        foreign key(CID) references class(CID)
    )

1.insert 增加
    /*属性个数和值的个数一致切一一对应*/
    insert into student(属性1,属性2) values(值1,值2)
    /*属性位置可以任意调换*/
    insert into student(属性2,属性1) values(值2,值1)
    /*属性数据类型和值一致*/
    insert into student(name,age) values('zs',12)
    /*属性可以省略,默认是全部属性*/
    insert into values(值1,值2)
    /*如果属性值为空,该属性可以省略*/
    insert into student(name) values('zs')
    /*如果数据有空值,在值列表也要写上*/
    insert into student(name,age) values('zs',NULL)
    
    /*插入数据,张姗 2004年8月14号*/
    insert into stuinfo(Sno,sname,birthday,cid,sex,dept,tel,homeland) values(202411105,'张姗','2004-08-14',8,'女','机械2班',NULL,'大连');
    /*上一条省略电话号*/
    insert into stuinfo(Sno,sname,birthday,cid,sex,dept,homeland) values(202411105,'张姗','2004-08-14',8,'女','机械2班','大连');
    /*省略属性列表*/
    insert into stuinfo values(202411105,'张姗','2004-08-14',8,'女','机械2班',NULL,'大连');

2.update 修改
    update 表名 set 属性1=新值1,属性2=新值2 where 查询条件;
    /*超市数据库*/
    create table goods
    (
        GID char(10) primary key,
        Gname varchar(50) unique,
        Gnum int,
        Gprice float(10) check(Gprice >= 0),
        Expdate date,
        Gtype varchar(30),
        foreign key(PID) references provider(PID)
    )
    
    /*1.把所有面包降价10%*/
    update Ginfo set Gprice = Gprice*0.9 where Gtype='面包';
    
    /*2.把库存大于等于20,价格大于8的牛奶,价格增加15%*/
    update Ginfo set Gprice = Gprice*1.15 where Gnum >= 20 and Gprice > 8 and Gtype='牛奶';
    
    /*3.把价格在50到80之间的白酒库存清零,价格增加15%*/
    update Ginfo set Gnum=0,Gprice=Gprice*1.15 where Gprice>=50 and Gprice<=80;
    
    /*4.把一周后到期的面包价格减掉3元*/
    update Ginfo set Gprice=Gprice-3 where day(Expdate) - day(getdate()) == 7 and Gtype='面包';
    
    /*5.把桃李供应商(12)供应的饮料和啤酒库存增加25%*/
    update Ginfo set Gnum=Gnum*0.25 where PID=12 and (Gtype='啤酒' or Gtype='饮料') and Gprice>=10;
    
    update Ginfo set Gnum=Gnum*0.25 where PID=12 and Gtype in('啤酒','饮料') and Gprice>=10;
    
    /*6.把价格大于10元的方便面和火腿肠的库存清零*/
    update Ginfo set Gnum=0 where Gprice>10  and Gtyle in('火腿肠','方便面');
    
    /*7.把华润供应商(18)供应的调料和化妆品价格上调5元*/
    update Ginfo set Gprice=Gprice+5 where PID=18 and Gtype in ('调料','化妆品');
   
    /*8.把商品信息表增加备注属性description varcher(50) 允许空*/
    alter table Ginfo
    add description varchar(50) NULL;
    
    /*9.修改备注的属性,改成desc*/
    alter table Ginfo
    alter column description desc;
    
    /*10删除备注属性*/
    alter table Ginfo
    drop column desc;
    
    3.delete 删除
    delete from 表名 where 条件
    
    /*1.删除所有商品信息*/
    delete from Ginfo;
    
    /*2.删除桃李供应商保质期在今天之前的*/
    delete from Ginfo where CID=12 and day(expdate) < day(getdate());
    
    /*3.删除库存小于3的面包啤酒牛奶*/
    delete from Ginfo where Gtype in('面包','啤酒','牛奶')
    
    /*4.删除价格大于100元的饮料和价格小于10元的白酒*/
    delete from Ginfo where Gprice>=100 and Gtype='饮料' or Gprice<=10 and Gtype='白酒';
    
    /*5.删除华润供应商(18)价格大于20元以上的面包和桃李(12)供应商库存小于等于12的牛奶*/
    delete from Ginfo where PID=18 and Gprice>=20 and Gtype='面包' or PID=12 and Gprice<=10 and Gtype='牛奶';
    
    /*6.删除过期的饮料,啤酒,酸奶,火腿肠*/
    delete from Ginfo where expdate < getdate() and Gtype in('饮料','啤酒','酸奶','火腿肠');
    
    /*7.删除价格在15到30直接的酸奶*/
    delete from Ginfo where Gprice between 15 and 30 and Gtype='酸奶';
    
    /*8.删除价格15以内和30以上的酸奶*/
    delete from Ginfo where Gprice not between 15 and 30 and Gtype='酸奶'
    
第四节课 2024.10.29
    DDL:数据定义语言
    DML:管理语言(insert、insert into、delete from)
    DCL:控制语言
    
    DBA:database administrator
    DBO:database owner
一、创建、修改、删除索引
    /*创建索引*/
    create [unique],[clustered] index 索引名 on 表名
    (
        属性,ASC|DESC
    )
    
    unique:唯一索引
    clustered:聚簇索引(存储数据有id号)
    一个基本表只能建立一个聚簇索引
    ASC:升序(从小到大)
    DESC:降序(从大到小)
    
    /*超市数据库*/
    create table goods
    (
        GID char(10) primary key,
        Gname varchar(50) unique,
        Gnum int,
        Gprice float(10) check(Gprice >= 0),
        Expdate date,
        Gtype varchar(30),
        foreign key(PID) references provider(PID)
    )
    /*创建唯一索引,按商品编号索引*/
    creare unique index g_id on Ginfo
    (
        gid
    );
    /*创建一个聚簇索引,按商品名称降序*/
    creare clustered index g_nam on Ginfo
    (
        gname DESC
    );
    
    /*删除索引*/
    drop index 索引名

二、查询语句-select
    select [top n|distinct|percent] 属性n
    from 表名
    where 表达式
    order by
    group by
    having
    
    1.top n:查询前n条记录
    2.distinct:去掉重复值
    3.属性,题目中指定了具体的查询属性,不能用*代替,*代表全部属性,可以是计算表达式,也可以包涵函数
    
    /*图书信息表*/
    create table binfo
    (
        Bid int primary key,
        bname varchar(50) unique,
        btype varchar(30),
        Bprice float,
        Bnum int,
        author varchar(20),
        PID int,
        pdate date
    )
    /*1.查询图书信息表中前80条记录*/
    select top 80 from * binfo;
    /*2.查询图书信息表中前35%的记录*/
    select top 35 percent * from binfo;
    /*3.查询图书信息表中,清华大学出版社(12)的书名,作者名,价格,数量*/
    select bname,author,bprice,bnum from binfo where pid=12;
    /*4.查询工业出版社(15)的图书类型,去掉重复项*/
    select distinct btype from binfo where gid=15;
    /*5.查询C语言编程这本书的书名,作者,价格,出版年份*/
    select bname,author,bprice,year(ptate) from binfo where bname='C语言编程';
    /*6.查询计算机类图书的书名,2024年查询,作者你好,价格*/
    select bname,'2024年查询',author+'你好',bprice,bnum from binfo where btype='计算机类';
    
    别名:属性和表的别名(别名可以是中文)
    select 字段 as 别名;
    select bname as 书名 from binfo;
    
    4.where条件
        运算符:+、-、* 、%
        比较符:>,<,>=,<=,!=
        逻辑运算:
        and:同时满足,同时为真才真
        or:或者,有真则真
        not:否,真就假,假则真
        in():括号里是同一种数据类型,值并列地位,位置可以互换。
        not in():
        between and:大于等于多少到小于等于多少,包含边界
        not between and:
        any、some:有一个是真则真
        all():全是真才真
        exists():有一个查询结果为真,就真
        优先级:
            1.括号
            2.* 、/ 、%
            3.+ 、-
            4.* 、\ 、%
            5.and
            6.or
    
    5.排序
        order by 属性1 DESC, 属性2 ASC;
        1.位置有先后顺序
        2.排序按属性顺序排,可以是数字、字符、日期
        3.属性后可以跟ASC|DESC
            ASC:升序,可以省略
            DESC:降序,不能省略
            
    /*图书信息表*/
    create table binfo
    (
        Bid int primary key,
        bname varchar(50) unique,
        btype varchar(30),
        Bprice float,
        Bnum int,
        author varchar(20),
        PID int,
        pdate date
    )
    /*1.查询清华大学出版社(12)和电子出版社(21)出版的电器类图书。*/
    select * from binfo where pid in(12,21) and btype='电器类';
    
    /*2.查询现代文学类和古典文学类的图书的价格、书名、作者、数量、按价格降序排序*/
    select Bprice,bname,author,Bnum from binfo where btype in('现代文学类','古典类') order by bprice DESC;
    
    /*3.查询不是艺术类号体育类图书的书名、作者、价格,以中文名称显示查询结果,按作者升序,价格降序排列*/
    select bname as 书名, author as 作者,Bprice as 价格 where Gtype not in('艺术类','体育类') order by author, bprice DESC;
    
    /*4.查询价格在50-120之间清华大学出版社的2010年以后的图书信息,按书名降序,数量升序排列*/
    select * from binfo where Gprice between 50 and 120 and pid=12 and yaer(pdate) > 2010 order by bname DESC,bnum;
    
    /*5.查询2010年至2020年期间机械工业出版社(21)出版的图书的书名、作者、价格,按出版日期降序排序*/
    select bname,author,bprice from binfo where pid=21 and year(pdate) between 2010 and 2020 order by pdate DESC;

    6.模糊查询
    在where条件里
    like '关键字'
    必须是字符类型
        1.通配符
            %:匹配0到任意多个字符
            _:匹配一个英文字母
            __:匹配一个汉字
            []:匹配其中括号中的一个字母
            [^]:不匹配括号中的内容
    
    /*图书信息表*/
    create table binfo
    (
        Bid int primary key,
        bname varchar(50) unique,
        btype varchar(30),
        Bprice float,
        Bnum int,
        author varchar(20),
        PID int,
        pdate date
    )
    
    /*1.查询姓王的计算机类的图书*/
    select * from binfo where btype='计算机类' and author like '王%';
    /*2.查询图书中包含C语言的图书的信息*/
    select * from binfo where bname like '%C语言%';
    /*3.查询作者名称姓刘的三个字姓名的机械类图书*/
    select * from binfo where btype='机械类' and (author like '刘_ _ _ _' or author like '刘_ _ _ _');
    /*4.查询书名第二个和第三个字是”数据”的图书书名、作者、价格。*/
    select bname,author,bprice from binfo where bname like '_ _ 数据%';
    /*5.查询以“实用教程”结尾的机械出版社(21)出版的图书的名称、价格、作者*/
    select bname,author,bprice from binfo where bname like '%实用教程' and pid=21;
    


第五节课

一、聚合函数(聚集函数) - 统计或计算
    1.count(属性):统计个数 属性唯一
        count(distinct | all *)
    2.sum(属性):求和 属性需为数值型
        sum(score)
    3.avg(属性):求平均值 属性需为数值型
        avg(distinct | all 属性)
    4.max(属性):求最大值 属性需为数值型
    5.min(属性):求最小值 属性需为数值型
    /*超市数据库*/
    create table goods
    (
        GID char(10) primary key,
        Gname varchar(50) unique,
        Gnum int,
        Gprice decimal(8,2),
        Expdate date,
        Gtype varchar(30),
        foreign key(PID) references provider(PID)
    )
    /*1.统计超市多少种牛奶*/
    select count(*) from goods where Gtype='牛奶'; /*返回200*/
    select Gname from goods where Gtype='牛奶'; /*返回200条记录*/
    
    /*2.统计超市娃哈哈矿泉水和雪碧商品的库存数量*/
    select sum(Gnum) from goods where Gname in('娃哈哈矿泉水','雪碧');
    
    /*3.统计超市白酒的平均价格*/
    select avg(Gprice) from goods where Gtype='白酒';
    
    /*4.查询超市最贵的啤酒的价格*/
    select max(Gprice) from goods where Gtype='啤酒';
    
    /*5.查询超市最贵的啤酒的信息*/
    select Gname,Gprice,Gnum,Expdate from goods where Gtype='啤酒' and Gprice in (select max(Gprice) from goods where Gtype='啤酒';)
    
    /*6.查询超市价格在10元以上的饮料的最低的价格*/
    select min(Gprice) from goods where Gtype = '饮料' and Gprice > 10.00;
    
    6.group by
        聚合没有group by,作用于所有记录
        聚合有group by,作用于分组
        group by classid
    
    /*查询选修了三门课程以上的学生*/
    select sno from sc group by sno having count(*) > 3;
二、连接查询

1.内连接
    关键字:inner join 表名 on 连接条件
    含义:
        1.只返回满足where查询条件的记录,去掉重复值
        2.连接条件:表1.外键=表2的l.主键
            goods.PID=provider.pid
        3.连接中的where和and是同时满足关系
        /*查询华润供应商供应的商品的种类名称价格供应商名称电话地址*/
        select Gtype,Gname,Gprice,Pname,Ptele,Paddress from goods inner join provider on goods.pod=provider.pid where Pname='华润供应商';
        
        select Gtype,Gname,Gprice,Pname,Ptele,Paddress from goods,provider where goods.PID=provider.PID and Pname='华润供应商';
        
        4.表名.属性名称
           (1)如果表之间有相同的属性名称,属性前必须加上表名
           (2)如果属性名称在多表中是唯一的,可以省略
           表名.Gname, goods.Gname
2.外连接
    关键字:outer join 表名 on 连接条件
    (1)左外连接 left outer join ... in
        返回左边表全部记录,右边是满足where条件的记录,做笛卡尔乘积
    (2)右外连接 right outer join ... in
        返回右边表全部记录,左边是满足where条件的记录,做笛卡尔乘积
    (3)全连接 full outer join ... in
    
/*超市数据库*/
create table goods
(
    GID char(10) primary key,
    Gname varchar(50) unique,
    Gnum int,
    Gprice decimal(8,2),
    Expdate date,
    Gtype varchar(30),
    foreign key(PID) references provider(PID),
    
)
/*供应商表*/
create table provider
(
    PID int,
    Pname varchar(50),
    Ptele char(20),
    Paddress varchar(50),
)
/*1.查桃李供应商和华润供应商供应牛奶和啤酒商品的名称,价格,供应商名称,电话,地址。2种写法*/
select Gtype,Gname,Gprice,Pname,Ptele,Paddress from goods inner join provider on goods.pid=provider.pid where provider.Pname in('华润供应商','桃李供应商') and goods.Gtype in('牛奶','啤酒');

select Gtype as 商品类型,Gname as 商品名称,Gprice as 商品价格,Pname as 供应商价格,Ptele as 电话,Paddress as 地址 from goods,provider where goods.PID=provider.PID and provider.Pname in('华润供应商','桃李供应商') and goods.Gtype in('牛奶','啤酒');

三、嵌套查询
1.一个select包含了子查询
    (1)in () 的子查询属性和where条件的属性一致
    (2)使用in()
    (3)子查询还可以有子查询
    (4)子查询不能使用order by
    /*查张红的班级*/
    select class from student where sname='张红';
    /*查计算机2班的女同学数量*/
    select count(*) from student where class='计算机2班”
    /*查跟张红一个班的女同学的个数*/
    select count(*) from student where class in(select class from student where sname='张红x');
    
    /*超市数据库*/
    create table goods
    (
        GID char(10) primary key,
        Gname varchar(50) unique,
        Gnum int,
        Gprice decimal(8,2),
        Expdate date,
        Gtype varchar(30),
        foreign key(PID) references provider(PID),
        
    )
    /*供应商表*/
    create table provider
    (
        PID int,
        Pname varchar(50),
        Ptele char(20),
        Paddress varchar(50),
    )
    /*1.查与雪碧同一供应商供应的牛奶类商品的名称,价格,数量*/
    select Gname,Gprice,Gnum from goods where Pname in(select pid from provider where Gname='雪碧');
    
    /*2.查饮料商品中最便宜的带有‘矿泉水’的商品的名称,价格,数量*/
    select Gname,Gprice,Gnum from goods where Gtype='饮料' and Gname like '%矿泉水%') and Gprice in(select max(Gprice) from goods where Gtype='饮料' and Gname like '%矿泉水%');

四、创建视图(视图是虚表)
1.语法:
    create view 视图名称 (属性1,属性2,...)
    [with encryption]
    as
    select 查询
    [with check option]
    
    (1)视图名称和视图属性可以用中文
    (2)属性列表可以省略
    (3)视图属性有函数和算数表达式不能省

    /*1.创建[加密]视图“牛奶和饮料商品信息表”,中文显示商品名称,种类,价格,数量,供应商名称,供应商电话*/
    create view 牛奶和饮料商品信息表 [with encryption] as select Gname as 商品名称,Gtype as 种类,Gprice as 价格,Gnum as 数量,Pname as 供应商名称,Ptele as 供应商电话 from goods,provider where Gtype in('牛奶','饮料') and goods.pid=provider.pid;
    
    /*2.在牛奶和饮料商品信息表视图中查询价格在8到12之间的牛奶和饮料的名称,价格,供应商名称:*/
    select 商品名称,价格,供应商名称 from 牛奶和饮料商品信息表 where 价格 between 8 and 12 and 种类 in('牛奶','饮料');
    
    /*3.删除饮料商品信息表视图*/

研表究明,汉字的序顺并不定一能影阅响读。