《mysqlPPT教程》由会员分享,可在线阅读,更多相关《mysqlPPT教程(142页珍藏版)》请在金锄头文库上搜索。
1、mysql-PPTmysql-PPT教程教程数据库概述数据库基础知识SQL语言MySQL数据库基础操作MySQL数据库数据库第一部分:数据库概述第一部分:数据库概述 数据库基本概念数据库基本概念 什么是什么是MySQL数据库数据库 MySQL基本操作基本操作数据库数据库(Database)(Database)数据库管理系统数据库管理系统(DBMS)(DBMS)数据库系统数据库系统(DBS)(DBS) 数据库数据库基本概念基本概念数据库数据库(Database,简称DB)的定义的定义:“按照数据结构来组织、存储和管理数据的仓库” J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起
2、的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务数据库数据库人工管理阶段人力手工整理存储数据文件系统阶段使用磁盘文件来存储数据数据库系统阶段关系型数据库高级数据库阶段 “关系-对象”型数据库数据库的发展史纯文本数据库:纯文本数据库:纯文本数据库是只用空格符、制表符和换行符来分割信息的文本文件。适用于小型应用,对于大中型应用来说它存在诸多限制:只能顺序访问,不能进行随机访问。查找数据和数据关系或多用户同时访问进行写操作时非常困难。关系数据库:关系数据库:由于纯文本数据库存在诸多局限,所以人们开始研究数据模型,设计各种类型的使用方便的数据库。在数据库的发展史上,最具影
3、响的数据库模型有:层次模型、网状模型和关系模型。其中,关系模型是目前应用最广泛和最有发展前途的一种数据模型,其数据结构简单,当前主流的数据库系统几乎都采用关系模型。数据库的类型数据库的类型数据按一定的数据模型组织、描述和储存可为各种用户共享冗余度较小,节省存储空间易扩展,编写有关数据库应用程序数据库的优点数据库管理系统数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。关系型数据库管理系统称为RDBMS,R指RelationRelationDBMS的作用它对数据库进行统一的管理和控制,以保证数据库的
4、安全性和完整性。数据库管理系统数据定义功能: 提供数据定义语言(DDL) 定义数据库中的数据对象数据操纵功能: 提供数据操纵语言(DML) 操纵数据实现对数据库的基本操作 (查询、插入、删除和修改)DBMS的主要功能For程序员数据库的运行管理 保证数据的安全性、完整性、 多用户对数据的并发使用 发生故障后的系统恢复数据库的建立和维护功能(实用程序) 数据库数据批量装载 数据库转储 介质故障恢复 数据库的重组织 性能监视等DBMS的主要功能For数据库管理员Oracle应用广泛、功能强大,分布式数据库系统“关系-对象”型数据库MySQL快捷、可靠开源、免费、与PHP组成经典的LAMP组合SQL
5、 Server针对不同用户群体的五个特殊的版本易用性好DB2应用于大型应用系统,具有较好的可伸缩性时下流行的DBMS数据库系统(Database System,简称DBS)是一个实际可运行的存储、维护和应用系统提供数据的软件系统数据库系统构成DBMSDB应用软件数据库管理员用户数据库系统数据库系统的使用数据库服务器响应和提供数据响应和提供数据应用程序数据库数据库数据库数据库操作和查询操作和查询什么是MySQLMySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源
6、码这一特点,许多中小型 网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL数据库性能快捷、优化性能快捷、优化SQL语言语言容易使用容易使用多线程和可靠性多线程和可靠性多用户支持多用户支持可移植性和开放源代码可移植性和开放源代码遵循国际标准和国际化支持遵循国际标准和国际化支持为多种编程语言提供为多种编程语言提供APIMySQl特征特征子查询视图存储过程触发器事务处理热备份二进制Bit类型等等MySQL5特性特性不能直接处理XML数据一些功能上支持的不够完善和成熟不能提供任何OLAP(实时分析系统)功能等等.MySQL不足MySQL的官方网站引述MySQL是“世界上最受欢迎的
7、开放源代码数据库”。这不是狂妄之语,数字可以证明它:目前,有超过1000万份的MySQL被安装用于支付高负荷的网站和其他关键商业应用,包括像阿尔卡特、爱立信、朗讯、亚马逊、Google、纽约证券交易所、迪斯尼、Yahoo、美国宇航局等这样的产业领袖。在下述网页你还能查看到MySQL和它竞争对手进行了短兵相接的比较。http:/ -h host_name -u user_name ppasswordh:当连接MySQL服务器不在同台主机时,填写主机名或IP地址u:登录MySQL的用户名p:登录MySQL的密码注意:密码如果写在命令行的时候一定不能有空格。如果使用的系统为linux并且登陆用户名字
8、与MySQL的用户名相同即可不用输入用户名密码,linux默认是以root登陆,windows默认用户是ODBCmysql命令选定默认数据库:use dbname;显示所有数据库:show databases;显示默认数据库中所有表:show tables;放弃正在输入的命令:c显示命令清单:h退出mysql程序:q查看MySQL服务器状态信息:smysql程序常用命令mysqladmin命令完成许多系统管理任务,如创建或删除一个数据库、修改密码等格式:mysqladmin option admincommand创建数据库mysqladmin u root p create newdb (不要
9、输入;号)删除数据库mysqladmin u root p drop newdb更改密码mysqladmin u root p password “newpasswd” 注意,这里的password就是一个命令,”newpasswd”就写的是心的密码mysqladmin命令mysqldump命令用于为数据库创建备份格式:mysqldump option dbname bak.sqlmysqldump u root p tmpdb backuptmp.sql备份出来的是一个文本文件,默认为utf-8字符集,如果想使用另外一种字符集,必须使用 -default-character-set=gbk选
10、项来设置mysqldump命令MySQL CC http:/ OS X 的版本现在也有DBTOOL专业管理器,来自http:/.br,是一个用于管理MySQL数据库、表和索引的图形客户,其输入来自其他RDBMS的数据,该管理器提供一个用于查询和报告设计的接口。附加工具MySQL是一种功能非常强大的关系型客户服务器数据库系统,它的安全性和稳定性足以满足许多应用程序的要求,而且有着非常高的性价比。总结第二部分:数据库基础知识第二部分:数据库基础知识 数据库基础知识概述数据库基础知识概述 SQL概述概述 SQL语言语言 数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(t
11、able)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库档案柜=数据库抽屉=表文件=记录数据库基础知识数据库数数数数 据据据据 表表表表存储过程存储过程存储过程存储过程视视视视 图图图图. 订单订单订单订单 客户客户客户客户 产品产品产品产品 产品数据库表数据表行(记录)列列(字段字段)数据在表中的存放编号姓名年龄民族部门1王涛33汉族人事管理部2李梅27汉族人事管理部1127李梅21133王涛1部门编码民族编码年龄姓名编号回族2汉族1民族民族编码市场营销部2人事管理部1部门部门编码存在冗余为减少数据查找的麻烦,允许数据有一定的冗余为减少数据查找的麻烦,允许数据
12、有一定的冗余数据存储的完整性Roll NumberNameAddressBookTaken12Alicia Ruth12, Temple StreetAC09114Jason Darren123, Sunset Blvd.AC04315Mary Beth32, Golden AvenueAC02112Alicia Ruth12, Temple StreetAC04312Alicia Ruth12, Tmple StreetAC01115Mary Beth33, Golden AvenueAC011不同的地址不同的地址! !存在不正确、不准确的数据,数据库存在不正确、不准确的数据,数据库“失去了
13、完整性失去了完整性”姓名姓名数据的完整性数据完整性数据完整性可靠性可靠性准确性准确性数据实体完整性字段完整性引用完整性自定义完整性完整性分类数据实体完整性河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012. .地址地址姓名姓名学号学号江西南昌雷铜0010014约束方法:唯一约束、主键约束约束方法:唯一约束、主键约束字段完整性河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012. .地址地址姓名姓名学号学号湖北江门李亮ABCDEFG
14、约束方法:限制数据类型、检查约束、外键约束、约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束默认值、非空约束引用完整性科目学号分数数学001001288数学001001374语文001001267语文001001381数学001001698河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012地址地址姓名姓名学号学号980010021数学约束方法:外键约束约束方法:外键约束自定义完整性帐号姓名信用.00192孙悟空700288猪悟能612333段誉890111虚竹4093000岳不群-10AV12132
15、2乔峰CV0016AV372133玄痛CV0015AV378291沙悟净AV0014AV378290猪悟能AV0013AV378289AV378289孙悟空AV0012. .会员证会员证用户姓名用户姓名用户编号用户编号约束方法:规则、存储过程、触发器约束方法:规则、存储过程、触发器触发器:检查信用值创建数据库表完毕!输入数据项,验证主键、主外键关系、检查约束输入数据项,验证主键、主外键关系、检查约束什么是SQL? SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”
16、的命令,“怎么做”是不用使用者考虑的。SQL概述DML( Data Manipulation Language数据操作语言)查询、插入、删除和修改数据库中的数据;SELECT、INSERT、 UPDATE 、DELETE等;DCL( Data Control Language数据控制语言)用来控制存取许可、存取权限等;GRANT、REVOKE 等;DDL( Data Definition Language数据定义语言)用来建立数据库、数据库对象和定义其列CREATE TABLE 、DROP TABLE、ALTER TABLE 等功能函数日期函数、数学函数、字符函数、系统函数等SQL语法组成属于
17、一个SQL语句,使用分号(;)结尾,否则mysql认为语句没有输入完。箭头(-)代表SQL语句没有输入完取消SQL语句使用(c)SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分)使用函数时,函数名和后面的括号之间不能有空格MySQL中使用SQL语言几点说明数据类型种类数据类型种类数值列类型数值列类型字符串列类型字符串列类型日期和时间列类型日期和时间列类型MySQL数据类型数据类型数值型数值型分为整型和浮点型分为整型和浮点型整型:整型:可以由十进制和十六进制表示整数由数字序列组成,如:1,100。由十六进制表示方法:0x且后面加19和AF 的任意数字或字母,并且0x中的
18、X不能大写。浮点型浮点型:浮点数由一个数字加一个小数点再加上一个数字组成。两个数字序列不能同时为空。数据类型种类数据类型种类字符串字符串:由单引号或者双引号括起来的字符或者数字。如:”abc”,abc10字符串中要用转义字符才能表示的特殊符号日期和时间值日期和时间值是存储如“2005 -1-1” 或者“12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序。NULL值值是一种无类型的值,表示“空,什么也没有”。 MySQL为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。数值列类型数值列类型 所有数值列类
19、型的类型名及其说明和所占的字节数见下表:数值列类型数值列类型数值列类型包括整型和浮点型说明:TINYINT, SAMLLINT, MEDIUMINT, INT, BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。AUTO_INCREMENTAUTO_INCREMENT 自动标识列,在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1开始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有
20、一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。举例:create table t(id int auto_increment not null primary key);UNSIGNED UNSIGNED 无符号,此属性禁用负值,将数值的取值范围从零开始。举例:create table t(num tinyint , num2 tinyint unsigned);数值列的完整性约束数值列的完整性约束NULL和和NOT NULL默认为NULL,即插入值时没有在此字段插入值时自动填NULL,如果指定了NOT NULL,则
21、必须在插入值时在此字段添入值,不允许插入NULL值。DEFAULT可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加DEFAULT后指定值。ZEROFILL 前导零填充数值类型值以达到列的显示宽度。举例:create table test2(num1 int default 1,num2 int zerofill); 字符串列类型字符串列类型所有字符串列类型及其说明和所占的字节数见下表: 说明:对于可变长的字符串类型,其长度取决于实际存放在列中的值的长度。此长度在上表中用L来表示。附加若干额外字节,用来记录字符串长度,也就是说总长度等于Ln(n1、2、3、4、8)CHAR和和
22、VARCHAR类型类型CHAR类型和VARCHAR类型长度范围都是0255之间的大小。他们之间的差别在于MySQL处理存储的方式:CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短 )。BLOB和和TEXT类型类型BLOB是二进制大对象,如果想存储二进制数BLOB将是最佳选择,而TEXT与之相同,只是BOLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分
23、大小写)。ENUM 和和SET类型类型是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用)字符串列类型的字符串列类型的可选可选属性属性BINARY使用此属性可以使列值作为二进制串处理,即看成BLOB类型。NULL 和NOT NULL同数值型功能相同DEFAULT同数值型功能相同日期和时间列类型日期和时间列类型所有时间和日期列类型的类型名及其说明和所占的字节数见下表: 说明:说明:每个时间和日期列类型都有一个零值,当插入非法数当插入非法数值时就用零值来添加值时就用零值来添加表示日期时必须先按:年,月,日的顺序给出DATE ,TIM
24、E ,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为“YYYY-MM-DD”,“hh:mm:ss”和“YYYY-MM-DD hh:mm:ss”,对于DATETIME类型,日期和时间部分都需要TIMESTAMP时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是19700101000000到2037年的某个时间,主要用于记录更改或创建某个记录总结:常用数据类型分类备注和说明数据类型说明二进制数据类型存储非子符和文本的数据BLOB可用来存储图像文本数据类型字符数据包括任意字母、符号或数字字符的组合char固定长度的非 Unicode 字符数据varchar可变长
25、度非 Unicode 数据text存储长文本信息日期和时间日期和时间在单引号内输入time时间date日期datetime 日期和时间数值型数据该数据仅包含数字,包括正数、负数以及浮点数intsmallint整数floatdouble浮点数货币数据类型用于财务数据decimal定点数Bit数据类型表示是/否的数据bit存储布尔数据类型建立数据库操作:建立数据库操作:语法:create database create database 数据库名数据库名叙述:创建一个具有指定名称的数据库。如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。例:建立一个student库。 mysql
26、 create database student;创建数据库创建数据库建立表操作建立表操作:语法:create table create table 表名(表名(列名列名1 1 列类型列类型 ,列名列名2 2 列类型列类型 , , . . ); . . );叙 述:在当前数据库下新创建一个数据表。列类型:表示该列的数据类型。例:建立一个表建立一个表school,school,其由两列组成,第一列属性为非空,并做为主键其由两列组成,第一列属性为非空,并做为主键, ,并自增并自增create table school( school_id int(10) not null auto_increme
27、nt primary key, school_name varchar(20) );创建表常见完整性约束:常见完整性约束:PRIMARY KEY 主码约束(主键)UNIQUE唯一性约束NOT NULL非空值约束AUTO_INCREMENT 用于整数列默认自增1UNSIGNED 无符号整数DEFAULT default_value默认值约束DEFAULT cur_timestamp 创建新记录时默认保存当前时间(仅适用timestamp数据列)ON UPDATE cur_timestamp 修改记录时默认保存当前时间(仅适用timestamp数据列)CHARACTER SET name 指定字符
28、集(仅适用字符串)demo在创建一个新的MySQL数据表时,可以为它设置一个类型,其中最重要的3种类型是MyISAM:成熟、稳定和易于管理InnoDB:加入事物、数据行级锁定机制、外键约束条件、崩溃恢复等新功能HEAP:只存在于内存中,可做临时表create table tmp()ENGINE=MyISAM数据表类型数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。主键必须是唯一的主键应该是紧凑的,因此整数类型比较适合外键:引用另外一个数据表的某条记录。外键列类型尽
29、可能与主键列类型保持一致外键列应该加上NOT NULL主键与外键主键create table student(sid int not null auto_increment,name varchar(20) not null,primary key(sid);外键(自动检查外键是否匹配,仅适用自动检查外键是否匹配,仅适用InnoDB)create table score(cid int not null auto_increment primary key,score int,sid int,foreign key(sid) references student(sid);主表和从表1、当主表
30、中没有对应的记录时,不能将记录添加到子表成绩表中不能出现在学员信息表中不存在的学号;2、不能更改主表中的值而导致子表中的记录孤立把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变;3、子表存在与主表对应的记录,不能从主表中删除该行不能把有成绩的学员删除了4、删除主表前,先删子表先删学员成绩表、后删除学员信息表思考q电话号码一般使用什么数据类型存储?q性别一般使用什么数据类型存储?q年龄信息一般使用什么数据类型存储?q照片信息一般使用什么数据类型存储?q薪水一般使用什么数据类型存储?思考q学员姓名允许为空吗?q家庭地址允许为空吗?q电子邮件信息允许为空吗?q考试成绩允许为空吗?选择主键
31、的原则q最少性q尽量选择单个键作为主键q稳定性q尽量选择数值更新少的列作为主键思考q标识列允许为字符数据类型吗?q如果标识列A的初始值为1,则输入三行数据以后,再删除两行,下次再输入数据行的时候,标识值从多少开始?四例:建立一个学生信息表(student)定义列sno学号,类型为5位定长字符串,非空,主键定义列sname姓名,类型为8位定长字符串,非空定义列ssex性别,定义列sage年龄,类型为短整型定义列sdept系名,数据类型为20位变长字符串例:建立一个课程信息表(course)定义列courseid课程号,类型为整型,非空,自动增长,主键定义列cname课程名,类型为16位变长字符串
32、,非空例:建立一个学生考试成绩信息表(sc)定义列grade成绩,类型为整型要求把表字段补充完整,可以通过学号查看学生相关课程的成绩语法:describe describe 表名;表名; desc desc 表名;表名;叙述:用于显示表的创建结构。显示表结构操作显示表结构操作删除表操作语法:drop table if exists tab_name drop table if exists tab_name ,tab_name.,tab_name.叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。删除数据库操作语法:drop database if ex
33、ists db_namedrop database if exists db_name叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if exists 子句,则删除不存在的数据库不会出错。删除数据库或表操作删除数据库或表操作语法:alter table 表名 action; 说明:action 可以是如下语句:可以是如下语句:add 列名列名 建表语句建表语句 first | after 列名列名可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列add primary key (列名列名)为表添加一个主键,如果主键
34、已经存在,则出现错误add foreign key(列名列名) references 表名表名(列名列名)为表添加一个外键alter 列名列名 set default 默认值默认值可以更改指定列默认值更改表结构操作更改表结构操作change 旧列名旧列名 新列名新列名 first | after 列名列名/可以更改列类型和列名称,如果原列的名字和新列的名字相同modify 列名列名 first | after 列名列名 和change的作用相同drop 列名列名/可以删除一列drop primary key /可以删除主键engine 类型名类型名/可以改变表类型rename as 新表名新表
35、名/可以将表名更改举例举例1:向people表中添加字段address2,类型为varchar,最大长度为100alter table people add address2 varchar(100);举例举例2 2:将people表中的name列默认值改为100:alter table people alter name set default 100;举例举例3 3:向student表增加“入学时间”列,其数据类型为日期型。alter table student add scome date;注:无论基本表中原来是否已有数据,新增加的列一律为空值。举例举例4 4:将年龄的数据类型改为半字长
36、整数。alter table student modify sage smallint; 注:修改原有的列定义有可能会破坏已有数据 算数运算符算数运算符 比较运算符比较运算符 逻辑运算符逻辑运算符 位运算符位运算符MySQL运算符运算符 算数运算符算数运算符用字符串表示的数字在任何可能便于计算的地方都被自动地转换为数字。当执行转换时,MySQL遵循两个基本规则:如果第一位是数字的字符串被用于一个算数运算中,那么它被转换为这个数字的值。如果一个包含字符和数字混合的字符串不能被正确的转换为数字,那么它被转换成0。 字符串自动转换数字字符串自动转换数字比较运算符比较运算符 比较运算符允许我们对表达式
37、的左边和右边进行比较。一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)。 比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY二进制关键字)对于运算符对于运算符,如果表达式两边不相等返回真值,相等返回假值。还可以比较字符串BETWEEN运算符运算符 用于检验一个值(或者一个求值表达式)是否存在一个指定的范围内:运算符用于检验一个值(或者一个求值表达式)是否包含在一个指定的值集合中。 可以使用IS NULL或者IS NOT NULL运算符来测定是否为空。 可以使用特殊的运算符运算符,MySQL称为”NULL
38、安全的等于”运算符。这意味着即使当包含在比较运算符中的表达式含有一个NULL值时,MySQL也会为比较运算符返回一个真值或假值。如果想执行通配符数据搜索,应该使用LIKE运算符运算符。它通过在表达式中允许使用专门的通配字符,可以找出与指定搜索字符串全部或部分匹配的记录。默认情况下,比较是不区分大小写的方式执行的。然而,以前我们注意到,可以添加BINARY关键字让MySQL执行区分大小写的比较。“%” (百分号百分号) 代表任意长度(长度可以为0)的字符串举例举例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串“_ ”(下横线下横线) 代表任意单个字
39、符举例举例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串MySQL数据库中的通配符数据库中的通配符 逻辑运算符逻辑运算符如下表所示:“” 表示按位取反。“” 表示异或。位运算符位运算符语法:叙述:如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用或“”引号括起来举例举例1:向people表中添加一条记录:insert into people(name,age) values(“zhangsan”,20);插入记录操作插入记录操作INSERT INTO 列名列名 VALUES 创建一张学生信息表,往表中插入数据create table
40、students(scode int not null auto_increment,sname varchar(20) not null,saddress varchar(20) default未知,sgrade int,semail varchar(20),ssex bit,primary key(scode);插入案例插入数据行 1注意事项注意事项1:1:每次插入一行数据,不可能只插入半行或者几列数据,因每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验;此,插入的数据是否有效将按照整行的完整性的要求来检验;INSERT INTO St
41、udents (SName,SAddress,SGrade,SEmail,SSEX) VALUES (小明) 插入数据行 2注意事项注意事项2:2:每个数据值的数据类型、精度和小数位数必须与相应的列每个数据值的数据类型、精度和小数位数必须与相应的列匹配匹配;INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX) VALUES (张青裁,上海松江,ZQC,ZQCS, 男) 插入数据行3注意事项注意事项4:4:如果在设计表的时候就指定了某列不允许为空,则必须插如果在设计表的时候就指定了某列不允许为空,则必须插入数据入数据;INSERT IN
42、TO Students (SAddress,SGrade,SEmail,SSEX) VALUES (上海松江,6,ZQCS,0)插入数据行4注意事项注意事项6:6:具有缺省值的列,具有缺省值的列,可以使用可以使用DEFAULTDEFAULT(缺省)关键字来代(缺省)关键字来代替插入的数值替插入的数值INSERT INTO Students (SName,SAddress,SGrade,SEmail,SSEX) VALUES (张青裁,DEFAULT,6,ZQCS,0)插入多行数据INSERT STUDENTS (SName,SGrade,SSex)VALUES(测试女生1,75,0), (测试
43、女生2,77,0),(测试女生3,83,0),(测试男生1,81,1),(测试女生4,90,0),(测试男生2,94,1),(测试女生5,51,0),(测试男生3,53,1);INSERT INTO (列名)VALUES(), (), ()插入多行数据INSERT INTO TongXunLu (姓名,地址,电子邮件) SELECT SName,SAddress,SEmailFROM StudentsINSERT INTO (列名)SELECT FROM 学生信息学生信息95001,洛燕妮洛燕妮,女女,20,信息系信息系 95002,欧阳炎欧阳炎,男男,19,计算机系计算机系 95003,何东
44、升何东升,男男,21,美术系美术系 95004,刘晨刘晨,男男,18,计算机系计算机系 95005,沙明华沙明华,女女,21,美术系美术系 95006,欧阳宝宝欧阳宝宝,男男,19,美术系美术系课程信息课程信息1,JAVA2,C3,.NET成绩信息成绩信息95001,1,98 95002,1,50 95004,1,70 95003,4,95 95005,4,40 95006,4,77 95001,2,80 95002,3,58 95006,2,70学生、课程、成绩插入数据语法:叙述: where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据。举例:
45、 将student表中的所有学生名称为Alex的改为Tom: update student set sname=Tom where sname=Alex;更改记录操作更改记录操作UPDATE SET WHERE 更新数据行UPDATE Student SET SSEX = 0UPDATE Student SET Sdept =家政系 WHERE Sdept = 刺绣系UPDATE ScSET Grade = Grade + 5WHERE Grade = 95语法:叙述:此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。举例:删除student表中的所有年龄小于1
46、8岁的记录: delete from student where sage18;删除记录操作删除记录操作DELETE FROM WHERE 删除学生编号为95005的学生信息包括成绩信息delete from student,sc using student,sc where student.sno = sc.studentid and student.sno=95005;说明:表和字段的引用方式有两种:绝对引用和相对引用绝对引用:数据库名.表名(.字段名)相对引用:表名.(字段名)补充说明删除数据行河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰
47、0010013山东定陶李山0010012. .地址地址姓名姓名学号学号980010016数学810010013语文670010012语文740010013数学880010012数学.分数学号科目DELETE FROM 学员信息表 WHERE 学号 =0010012 什么是查询?Application Logic客户程序查询请求查询结果集SQL SERVERA B C D E F G SELECT * FROM SALES查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来怎么查的?学员编号学员姓名地址所在班级. .001
48、001张明全湖南长沙S201S201002002李菲湖北宜昌S202S202003003于寄谦甘肃天水S204S204004004刘国正山东荷泽S201S201005005周接轮台湾新竹S204S204006006巩小妹香港龙湾S203S203007007巩大妹香港龙湾S203S203008008张明敏北京顺义S202S202009009矛十八四川棉阳S204S204010010罗林光陕西临潼S202S202011011司马坡新疆喀什S201S201S202陕西临潼陕西临潼罗林光罗林光010S202湖北宜昌湖北宜昌李菲李菲002S202北京顺义北京顺义张明敏张明敏008SELECT * FRO
49、M Student WHERE 所在班级 = S202SELECT DISTINCT | DISTINCTROW | ALL select_expression,. FROM table_references WHERE where_definition GROUP BY col_name,. HAVING where_definition ORDER BY unsigned_integer | col_name | formula ASC | DESC ,. LIMIT offset, rows PROCEDURE procedure_name SQL语法from子句:指定查询数据的表whe
50、re子句:查询数据的过滤条件group by子句:对匹配where子句的查询结果进行分组having子句:对分组后的结果进行条件限制order by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认)。 limit子句:对查询的显示结果限制数目procedure子句:查询存储过程返回的结果集数据查询记录操作查询举例SELECT FROM WHERE ORDER BY ASC或或DESC列名称列名称SELECT SNo, SName, Sdept表名表名FROMStudent过滤条件过滤条件WHERESSEX = 0排序条件排序条件ORDER BYSNoSELECTSNo,SNa
51、me,Sdept FROM Students WHERESSEX = 0ORDER BYSNo举例举例1 : 查询全体学生的学号与姓名。select sno,sname from student;举例举例2 : 查询全体学生的详细记录。select sno,sname,ssex,sage,sdept from student; 或select *from student; 举例举例3 3 : 查全体学生的姓名及其出生年份。select sname,2008-sage from student;举例举例4 4 : 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。select s
52、name,year of birth: ,2008-sage, islower(sdept) from student;举例举例5 5 : 查询选修了课程的学生学号(去掉重复的记录)select distinct studentid from sc;举例举例6 : 查询全体学生的学号与姓名,用中文显示列名。select sno as 编号,sname as 姓名 from student;举例举例7 : 给表设置别名。select s.sno,s.snamefrom student as s; 举例举例8 8 : 查询年龄在20以下的学生的姓名。select sname from studen
53、t where sage70;在WHERE子句中使用谓词 : BETWEEN AND :在两数之间NOT BETWEEN AND:不在两数之间IN :是否在特定的集合里(枚举)NOT IN :与上面相反LIKE:是否匹配于一个模式IS NULL(为空的)或IS NOT NULL(不为空的)REGEXP : 检查一个值是否匹配一个常规表达式。举例举例17 :17 :查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄 。 select sname,sdept,sage from student where sage between 20 and 23;举例举例18 :18 :查
54、询年龄不在2023岁之间的学生姓名、系别和年龄。 select sname,sdept,sage from student where sage not between 20 and 23;举例举例19 :19 :查询信息系、美术系和计算机系学生的姓名和性别。 select sname,ssex from student where sdept in (信息系,美术系,计算机系);举例举例20 : 查询学号为95001的学生的详细情况。select * from student where sno like 95001;等价于:select * from student where sno=9
55、5001; 举例举例21 : 查询所有姓刘学生的姓名、学号和性别。select sname,sno,ssex from student where sname like 刘%;举例举例22 : 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。select studentid,courseid from sc where grade is null;举例举例23 : 查所有有成绩的学生学号和课程号。select studentid,courseid from sc where grade is not null;举例举例24 : 查询计算机
56、系年龄在20岁以下的学生姓名。select sname from student where sdept=计算机系 and sage20;举例举例25 :25 :查询信息系、美术系和计算机系学生的姓名和性别select sname,ssex from student where sdept in (信息系,美术,计算机系);可改写为:Select sname,ssex from student where sdept=信息系 or sdept=美术 or sdept=计算机系;举例举例26 :26 :查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。select studenti
57、d,grade from sc where courseid=3 orber by grade desc;举例举例27 :27 :查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。select * from student order by sdept,sage desc; 多表查询问题学员内部测试成绩查询的每次显示的都是学员的编号信息,因为该表中只存储了学员的编号;实际上最好显示学员的姓名,而姓名存储在学员信息表;如何同时从这两个表中取得数据?连接查询同时涉及多个表的查询称为连接查询用来连接两个表的条件称为连接条件内连接(INNER JOIN)外连接左外联结 (
58、LEFT JOIN)右外联结 (RIGHT JOIN)外连接与普通连接的区别普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出:多表查询分类SELECT S.SName,C.CourseID,C.Grade From Sc AS CINNER JOIN Students AS SON C.StudentID = S.SNoScStudentsIDStudentsID CourseIDCourseIDGradeGrade122300100100200297896776300381猜一猜:这样写,返回的查询结果是一样的吗?SELECT S.SN
59、ame,C.CourseID,C.Grade From Students AS SINNER JOIN Sc AS CON C.StudentID = S.SNo再猜一猜:以下返回多少行?SELECT S.SName,C.CourseID,C.Grade From Students AS SINNER JOIN Sc AS CON C.StudentID S.SNo多表查询内连接-1StundentsSNameSName梅超风陈玄风陆乘风曲灵风SNoSNo1234查询结果查询结果SNameSName梅超风陈玄风陈玄风陆乘风CourseIDCourseID GradeGrade001001002
60、00297896776陆乘风00381多表查询内连接-2SELECT Students.SName, Sc.CourseID, Sc.GradeFROM Students,ScWHEREStudents.SNo = Sc.StudentID多表查询三表连接SELECT S.SName AS 姓名, CS.CName AS 课程, C.Grade AS 成绩FROM Students AS S INNER JOIN Sc AS C ON (S.SCode = C.StudentID)INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID)ScSt
61、udentsIDStudentsID CourseIDCourseIDGradeGrade122300100100200297896776300381多表查询左外连接StundentsSNameSName梅超风梅超风陈玄风陈玄风陆乘风陆乘风曲灵风曲灵风SNoSNo1234查询结果查询结果SNameSName梅超风梅超风陈玄风陈玄风陈玄风陈玄风陆乘风陆乘风CourseIDCourseID GradeGrade00100100200297896776陆乘风陆乘风00381曲灵风曲灵风NULLNULLSELECT S.SName,C.CourseID,C.Grade From Students AS
62、 SLEFT JOIN Sc AS CON C.StudentID = S.SNo猜一猜:这样写,返回的查询结果是一样的吗?SELECT S.SName,C.CourseID,C.Grade From Sc AS CLEFT JOIN Students AS SONC.StudentID = S.SNo多表查询右外连接SELECT Titles.Title_id, Titles.Title, Publishers.Pub_nameFROM titles RIGHT OUTER JOIN Publishers ON Titles.Pub_id = Publishers.Pub_id子查询:将一个
63、查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为子查询。一个SELECT-FROM-WHERE语句称为一个查询块例如: select sname from student where sno in (select studentid from sc where courseid=2);例如:查询选修了课程名为“Java”的学生学号和姓名 select sno,sname from student where sno in (select studentid from sc where cno = (select cno from course where cname=Java) );我们来创建一个副本:复制表复制表可以通过在SELECT查询中指定字段来限制出现在附表中的字段复制表复制表通过使用SELECT 语句创建已存在表的空副本,并且返回一个空结果集。复制表复制表未完待续.结束结束