资源描述
计算机二级MySQL基本知识点
※数据库:数据库是指长期存储在计算机内的、有组织的、可共享的数据集合。
※数据库管理系统:是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
※DBMS的主要功能:
①数据定义功能;
②数据操纵功能;
③数据库的运行和管理;
④数据库的建立和维护功能;
⑤数据库的通信功能(提供方便、有效存储数据库信息的接口和工具);
※数据库系统:是指在计算机系统引入数据库后的系统;一个完整的数据库系统一般包括数据库、数据库管理系统、应用开发工具、应用系统、数据库管理员和用户构成。
※数据库系统的特点:
①数据结构化;
②数据独立性高;
③数据共享性好;
④数据冗余度低;
⑤数据由DBMS统一管理和控制;
※内模式:对数据物理结构和存储方式的描述,是数据在数据库内部的具体表示方式。
※模式:对数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
※外模式:对数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。(外模式也称为子模式)
※三层模式使各层数据保持独立:
①层次独立性:数据库的整体逻辑结构和特征的描述是独立于数据库其他层次结构的描述;
②存储模式独立性:数据库的内部存储结构依赖于概念模式,但存储模式独立于外部模式,也独立于具体的存储设备;
③外模式独立性:用户逻辑结构(外模式)是在全局逻辑结构的描述的基础上定义的,它面向具体的应用程序,独立于内部模式和存储设备。
④应用程序独立性:特定的应用程序是在外模式描述的逻辑结构上编写的,它依赖于特定的外模式,与数据库的模式和存储结构独立。
※映象:是一种对应规则,它指出映象双方是如何进行转换的。
※两层映象:外模式/模式映象、模式/内模式映象。
※数据库系统的应用结构:
①客户/服务器(C/S)结构
优点:运行速度快、表现能力强
缺点:需要专门的客户端,不能跨平台
②浏览器/服务器(B/S)结构——eg:百度、淘宝等网站。
优点:基于网络语言,与操作系统无关,可以跨平台
※数据模型:对现实世界数据特征的抽象。
※概念模型:是面向数据库用户的现实世界的模型。
※模型:对现实世界特征的模拟和抽象。
※实体:客观存在并且可以相互区别的事物。
※属性:实体所具有的某一特性。
※联系:连接实体之间的一种关系。
※码:唯一标识实体的属性集。
※域 :域是一组具有相同数据类型的值的集合。
※实体型:同型实体的集合称为实体集。
※E/R图 :表示实体型、属性和联系的方法。
※E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。表示方法如下:
· 实体型:用矩形表示,矩形框内写明实体名;
· 属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;
· 联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1 : 1,1 : n或m : n)。
※两个实体之间联系的种类:
①一对一联系(1:1):实体集A中的一个实体至多与实体集B中的一个实体相对应,反之亦然,则称实 体集A与实体集B为一对一的联系。记作1:1。 如:班级与班长,观众与座位,病人与床位。
②一对多联系(1:n):实体集A中的一个实体与实体集B中的多个实体相对应,反之,实体集B中的一个实体至多与实体集A中的一个实体相对应。记作1:n。 如:班级与学生、公司与职员、省与市。
③多对多(m:n):实体集A中的一个实体与实体集B中的多个实体相对应,反之,实体集B中的一个实体 与实体集A中的多个实体相对应。记作(m:n)。
※关系模式:对关系的描述。
※主码(主键):是表中的一个或多个字段,它的值用于唯一的标识表中的某一天记录。
※外码(外键):用于建立和加强两个数据间的链接的一列或者多列。
※元组:表中的行称为元组;
※行:表中的一行记录,表中的数据都是按行存储的。
※列:表中的一个字段,所有表都是由一个或者多个列组成的。
※关系模型规范化的设计方法:通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常,删除异常,更新异常和数据冗余的问题。
※INF:关系数据库中的关系要满足一定要求的,满足不同程度要求的为不同范式,满足最低要求的叫第一范式。
定义:任给关系R,如果R中每个列与行的交点处的取值都是不可再分的基本元素,则R达到第一范式,简称1NF。
2NF:若R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF
3NF:每一个非主属性既不传递依赖于码,也不部分依赖于码。
BCNF:如果一个关系R中所有属性都不传递依赖于R的任何候选关键字,或者说关系R的每个决定因数都是候选关键字时,则称关系R属于BCNF范式。
也即通过消除主键列对主键的部分函数依赖和传递函数依赖,将3NF规范为BCNF。
※数据库结构设计的不同阶段形成数据库的各级模式,即:
①在概念设计阶段形成独立于机器特点,独立于各个DBMS产品的概念模式,在本篇中就是E-R图;
②在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后在基本表的基础上再建立必要的视图, 形成数据的外模式;
③在物理设计阶段,根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
概念模式是面向用户和设计人员的,属于概念模型的层次;逻辑模式、外模式、内模式是DBMS支持的模式,属于数据模型的层次。可以在DBMS中加以描述和存储。
课后总复习错题
10. 设有E-R图,含有A、B两个实体,A、B之间的联系类型是M:N,则将该E-R图转换为关系模式时,关系模式的数量是3.
解释:
一般情况下,在设计数据库的时候,如果存在多对多的情况
那么就必须将其分解为两个一对多的情况。也就是说,两个实体多对
多的关系,分解后必然在它们之间再出现一个实体来连接它们的关系。
举个例子来说:学生和课程之间它们是多对多的关系,因此在设计的时候
就需添加选课表了。这样答案就是3.
当两个实体是一对多的关系时,那就不需要分解了,这是就是2.
15. 数据库、数据库管理系统和数据库系统三者之间的关系是:
数据库系统包括数据库和数据库管理系统。
20. 在讨论关系模型时,与“属性”同义的术语是列。
21. 下列关于数据的叙述中,错误的是(A)
A. 数据的种类包括文字、图形和图像三类; B.数字只是简单的一种数据;
C.数据是描述事物的符号记录; D.数据是数据库中存储的基本对象。
※phpMyAdmin:是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具。
注意:由于phpMyAdmin是PHP程序,因此需要LAMP或者WAMP运行环境。
※SQL:结构化查询语言,是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。
※SQL的特点(优点):
①综合统一,具有一体化特点
②高度非过程化,是一种是面向对象的操作方式
③语言简洁、易学易用
※DDL:数据定义语言
DML:数据操纵语言
DCL:数据控制语言
※比较运算符:
运算符
含义
=
相等
>
大于
<
小于
>=
大于等于
<=
小于等于
<>、!=
不等于
!</!>
不小于/不大于
※逻辑运算符:
运算符
含义
ALL
如果一组的比较都为TRUE,那么就为TRUE
AND/&&
如果两个布尔表达式都为TRUE,那么就为TRUE
ANY/SOME
如果一组的比较中其中有任何一个为TRUE,那么就为TRUE
BETWEEN
如果操作数在某个范围以内,那么就为TRUE
EXISTS
如果子查询中包含一些行,那么就为TRUE
IN
如果操作数等于表达式列表中的一个,那么就为TRUE
LIKE
如果操作数与一种模式相匹配,那么就为TRUE
NOT/!
对任何其他布尔运算符的值取反
OR/ ||
如果两个布尔表达式中的一个为TRUE,那么就为TRUE
※位运算符:
运算符
运算规则
&
位AND
|
位OR
^
位XOR
~
位取反
>>
位右移
<<
位左移
※内置函数的主要分类:
①数学函数:用于执行一些比较复杂的算术操作的函数,例如ABS()函数、SORT()函数;
②聚合函数:特意为求和或者对表中的数据进行集中概括而设计的函数;例如,COUNT()函数。
③字符串函数:为2字符串操作而设计的函数;例如,ASCII()函数、CHAR()函数。
④日期和时间函数:操作日期和时间的函数;例如,NOW()函数、YEAR()函数。
⑤加密函数:对数据进行加密的函数;例如ENCODE()函数、ENCRYPT函数。
⑥控制流函数:用来进行条件操作的函数;例如IF()函数。
⑦格式化函数:为格式化数据设计的函数;例如FORMAT()函数。
⑧类型转化函数:可以把一个值转换为指定的数据类型的函数;例如,CAST()函数。
⑨系统信息函数:获得系统本身的信息的函数;例如USER()函数、VERSION()函数。
课后总复习错题
2. 在MySQL中,NULL的含义是(C)
A. 空串 B.数值0 C.无值 D.FALSE
NULL和空串的区别:NULL是指该字段没有值,而空串代表的是该字段有值。
5.在安装和配置MySQL实例的向导中,可选的MySQL服务器类型包括Developer Machine(开发者机器)、Server Machine (服务器)、Dedicated MySQL Server Machine(专用MySQL服务器)
7.使用MySQL时,可以在MySQL客户端中执行SQL语句,但下面无法用于执行SQL语句的客户端工具是mysqld(C)。
A.mysql命令行 B.phpMyAdmin C.mysqld D.Navicat工具
8.函数NOW()返回的结果是系统的当前日期和时间。
※数据对象:性质相同的数据元素的组合。
※数据类型:系统中所允许的数据的类型。
※在MySQL中可以利用SHOW ENGINES语句来显示可用的数据库引擎和默认引擎。InnoDB是系统的默认引擎,其支持可靠的事务处理。
※一般语法描述所使用的符号如下:
<>:表示在语句中必须指定数据对象,是不可缺少的。
[]:表示可以根据需要进行选择。
|:表示多个选项只能选择其一。
{}:表示必选项。
问题:mysql命令行输入时,忘记输入分号;就按了回车,就会出现->,然后回不到上一行怎么办?
若是没有分号结束的话,不管多少行都会视作一句,如果已经输好了程序但是忘了输入分号按了回车,接着在出现->的后边输入分号即可,然后按回车就会执行前面的sql。
例1:在MySQL中创建一个名为mytest的数据库。
Mysql>Create database mytest;
可以在这里加上if exists用于判断是否存在这个数据库,用于防止数据库不存咋时发生错误。
例2:修改已有数据库mytest的默认字符集和校对规则。
Mysql>alter database mytest
->default character set gb2312
->default collate gb2312_chinese_ci;
其中character set 子句用于更改默认的数据库字符集。
例3:首先删除一个尚未创建的数据库“an_test”,然后在删除语句中加上if exists语句以后再操作一次。
出现报错的现象;
加上if exists 语句以后,可以正常执行;
Mysql>drop database if exists an_test;
例4:列出当前用户可查看的数据库列表。
Mysql>show databases;——显示权限范围内的所有数据库名;
Mysql>show databases like 'mytest';——显示与‘mytest’相匹配的数据库名。
例5:在一个已有的数据库mytest中新建一个包含姓名、性别、年龄、专业、联系方式等字段的学生的基本信息表,要求将字段student_id号指定为该表的主键,并使用InnoDB引擎存储表数据。
mysql> use mytest
Database changed
mysql> create table students
-> (
-> student_id int not null auto_increment,
-> student_name char(50) not null,
-> student_sex char(1) not null default 0,
-> student_age int not null,
-> student_major char(50) not null,
-> student_contact char(50) null,
-> primary key(student_id))
-> engine=innodb;
※在mysql中写sql语句回车后如何更改上一句话?
右键单击“mysql”的“dos窗口”上面的 蓝色横条
选择编辑->标记->然后按住鼠标左键选中你要修改的语句,再去右击蓝色横条选择编辑->复制就把这条你要修改的语句复制到剪贴板了然后去记事本里粘贴修改!
在记事本里写好命令复制,然后右键单点“mysql”的“dos窗口”上面的蓝色横条编辑->粘贴然后执行,当然这只是windows下的办法,要一次执行很多行代码的时候比较省事。
例6:向数据库mytest的表students中添加一列,并且命名为student_from,用于描述学生的生源地,要求不能是NULL,且该列位于原表列student_sex列之后。
Mysql>use table mytest.students
->add column student_from char(10) not null after student_sex;
※change子句:同时修改表中指定列的名称和数据类型。
例7:将数据库mytest中标students的student_from 列重命名为student_city,且数据类型为char(20),允许为NULL。
Mysql>alter table mytest.students
->change column student_from student_city char(20) null;
※Alter子句可以修改或者删除表中指定列的默认值。
例8:将数据库mytest中表students的student_sex列的默认值改为1(代表‘女’).
Mysql>alter table mytest.students
->alter column student_sex set default 1;
※modify子句可以修改指定列的数据类型,但不会干涉它的列名。
与change的区别:change是可以将列名和数据类型都一起改了的。
例9:将数据库mytesr中的表students的students_name列的数据类型由char(50)更改为char(20),并且将此列设置为该表的第一列。
Mysql>alter table mytest.students
->modify column student_name char(20) first;
注意:add和modify都可以通过first或者after关键字来修改指定列在表中的位置。
例10:删除数据库mytest中students的student_contact列。
Mysql>alter table mytest.students
->drop column student_contct;
※rename子句可以为表重新赋予一个表名。
例11:使用rename子句,重新命名数据库mytest中表students的表名为university_students.
Mysql>alter table mytest.students
->rename to mytest.university_students;
或者使用另一种格式:
例12:使用rename table 子句将数据库中mytest的university_students重新命名为students
Mysql>rename table mytest.university_students to mytest.students;
※复制表的语法格式:
Create table <表名>[LIKE|AS<旧表名>]
LIKE:可以创建一个与旧表结构相同的表,其中列名、数据类型、空指定和索引都将复制到新表,但是表的内容不会复制,因此创建的是一个和原表结构相同的空表;
AS:如果在复制表结构的同时,复制表的内容,可以用AS子句来完成。使用AS子句可以复制表的内容,但是索引和完整性约束不会被复制。
例13:在数据库mytest中创建一份表students的拷贝students_copy。
Mysql>create table mytest.students_copy like mytest.students;
※删除表:可以使用drop table子句删除表(可以同时删除多个表)
例14:删除数据库mytest的表students_copy。
Mysql>drop table mytest.students_copy;
※显示表的名称:show tables
方法一:
Mysql>use mytest;
Mysql>show tables;
这里的use引用了数据库以后也可以不用“;”直接就接下一个show tables;
方法二:
Mysql>show tables from mytests;
※显示表的结构:show columns(可以理解为每一列相当于属性,也即为表中的结构)
例16:显示数据库mytest中表students的结构。
Mysql>show columns from mytest.students;
注意:mysql支持用describe或者desc作为show columns from的一种快捷方式。
Mysql>desc mytest.students;
※关于空值(NULL):表的关键字不允许为空值,且任意两个空值不相等。
※关于标志(IDENTITY)属性:每个表中只有一个列设置为标志属性,并且该列只能是DECIMAL、INT、NUMERIC、SMALLINT、BIGINT、TINYINT数据类型。
※关于列类型的隐含改变:
①长度小于4的VARCHAR类型会被改变为CHAR类型;
②当一张表中包含任何变长的列时,如VARCHAR、TEXT、BLOB类型的列,该表中所有大于3个字符的其他CHAR类型列会被改变为VARCHAR类型列;
③TIMESTAMP类型的列值显示尺寸必须是在偶数2~14范围内;
④不能在TIMESTAMP中存储空值NULL,所以当该列的值设置为NULL的时候,MySQL会默认设置为它当前的日期时间。
课后总复习错题
5. 查看当前正在使用的工作数据库名称的语句是(C)
A. SHOW DATABASES; B.SHOW TABLES;
C.SELECT DATABASE(); D.SHOW SCHEMAS;
6. 在MySQL数据库中,以下不会受字符集设置影响的数据类型有(B)
A. CHAR B.INT C.VARCHAR D.TEXT
(参见以上资料——列类型的隐含改变)
※INSERT语句的三种形式:
①INSERT…VALUES:向表中插入一行数据,也可以插入多行数据;
②INSERT…SET:指定插入行中每列的值,也可以指定部分列的值;
③INSERT…SELECT:向表中插入其他表的数据;
例1:使用INSERT…VALUES语句向数据库mytest的表students中插入这样一行完整数据:(1320,‘王丽’,‘1’,22,‘计算机专业’,‘138xxxxxx’)。
Mysql>set names gbk; /*改变字符集*/
mysql> insert into mytest.students
-> values ('王丽',1320,'1','138xxxxxx',22,'计算机专业');
由于表的结构如下:
+---------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra
+---------------+----------+------+-----+---------+----------------+
| student_name | char(20) | YES | | NULL |
| student_id | int(11) | NO | PRI | NULL | auto_increment
| student_sex | char(1) | NO | | 1 |
| student_contact | char(20) | YES | | NULL |
| student_age | int(11) | NO | | NULL |
| student_major | char(50) | NO | | NULL |
+---------------+----------+------+-----+---------+----------------+
应该按照显示的表结构输入数据。
注意:在MySQL不能输入中文或者现实不出中文的时候,可以使用SET NAMES GBK;语句来临时改变字符集。
例2:使用INSERT…VALUES语句向数据库mytest 表students中插入一行数据,这行数据只给出student_name、student_major和student_age列的信息,对应的值是“李明”、“数学专业”,“22”,其中student_id由系统自动生成,其他采用默认或者不指定值。
mysql> insert into mytest.students
-> values('李明',0,default,null,22,'数学专业');
※其中的0代表的是学号;由于AUTO_INCREMENT属性列的值是在表中其它列被赋值以后生成的,所以在对表中其它列做任何赋值操作时,对该AUTO_INCREMENT属性列的引用只会返回数字0.
还有一种方法:由于自动增长大的学号值可以不必列出,由系统自动生成,同时允许NULL值的列也可以不给出,因为系统允许其为空值,只需要输入提供的值即可。
Mysql>insert into mytest.students
->(student_name,student_sex,student_age,student_major)
>values('李明',DEFAULT,22,'数学专业');
这种方法的好处是不必知道表结构,不会出现输入列与结构不对应的情况。
例3:使用INSERT…SET 语句来实现例2的数据插入需求。
Mysql>insert into mytest.students
->set student_name='李明',student_sex=default,student_age=22,student_major='数学专业';
采用这种方式的好处:输入方式更为灵活。
例4:使用INSERT…VALUES一次向mytest表students中插入两行数据,数据分别为(‘张三’,‘1’,24,‘化学专业’)和(‘王五’,‘1’,23,‘数学专业’)。
mysql> insert into mytest.students
-> (student_name,student_sex,student_age,student_major)
-> values('张三','1',24,'化学专业'),
-> ('王五','1',23,'数学专业');
例5:假设数据库mytest的表student中有一个拷贝备份表student_copy,现使用insert…select语句将student_copy中的数据合并到表students。
Mysql>insert into mytest.students
->(student_name,student_sex,student_age,student_major)
->select student_name,student_sex,student_age,student_major
->from mytest.sudents_copy;
※REPLACE语句的功能:插入的数据主键与已有数据的主键重复,则INSERT语句将无法插入此行。此时若是需要插入此行数据,则可以使用REPLACE语句来实现。则REPLACE的功能是替换主键重复的行数据。REPLACE的三种语法格式为:REPLACE…VALUES、REPLACE…SET、REPLACE…SELECT语句。
例6:使用INSERT 语句成功执行例2以后,数据库mytest表students会存在这样一条数据:('王丽',1320,'1','138xxxxxx',22,'计算机专业');现在向该表插入一条新数据:(‘李芳’,1320,‘1’,‘137xxxxxx’,26,‘会计专业’)。
如果直接插入,则程序会出现错误,原因是两条数据的主键都一样,都是1320。
所以,此程序应该为:
mysql> replace into mytest.students
-> values('李芳',1320,'1','137xxxxxx',26,'会计专业');
※使用DELETE语句从单个表中删除数据
DELETE FROM 表名 where子句/order by子句/limit 子句
Limit子句:用于告知服务器在控制命令被返回到客户端前删除行的最大值。
例7:使用DELETE 语句删除数据库mytest的表students中名字为‘王丽’的学生信息。
Mysql>delete from mytest.students where student_name='王丽';
例8:假设数据库中有三个表tbl1,tbl2,tbl3,它们均含有id列,现在要求删除表tbl1中id值等于tbl2的id值的所有行,以及表tbl2中id值等于tbl3的id值的所有行。
注意:弄清楚要删除的是哪个表。
Mysql>delete tbl1,tbl2 from tbl1,tb2l,tbl3
->where tbl1.id=tbl2.id and tbl2.id=tbl3.id;
※使用TRUNCATE删除表数据(清除表数据):使用TRUNCATE以后,表中的AUTO_INCREMENT计数器重新被置为该列的初始值。对于参与了索引和视图的表,不能使用TRUNCATE语句删除数据,而应该使用DELETE语句。
※事务日志:事务日志是一个数据库文件分开的文件,它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。
※使用UPDATE语句修改单个表:
例9:使用UPDATE语句将数据库mytest的表students中姓名为“张三”的学生的联系方式更新为“139xxxxxx”。
mysql> update mytest.students
-> set student_city='139xxxxxx'
-> where student_name='张三';
例10:使用UPDATE语句将数据库mytest的表students中名为“李芳”的年龄修改为23,将专业修改为“物理专业”。
mysql> update mytest.students
-> set student_age=23 and student_major='物理专业'
-> where student_name='李芳';
例11:假设数据库中有两个表tbl1和tbl2,他们都有两个名为id和name列,其中id列为各自的主键,现在要求当表tbl1和tbl2中id 值相同时,将表tbl1中name的列的值修改为“李明”,将表tbl2中name列的值为改为“王伟”。
Mysql>update tbl1,tbl2
->set tbl1.name='李明' and tbl2.name='王伟'
->where tbl1.id=tbl2.id;
课后总复习错题
3/7:学生表student包含sname、sex、age三个属性列,其中age默认值为20,执行SQL语句INSERT INTO student(sex,sname,age) VALUES('M','Lili', );的结果是(A)
A. 执行成功,sname,sex,age的值分别为Lili,M,20
B. 执行成功,sname,sex,age 的值分别为M,Lili,NULL
C. 执行成功,sname,sex,age的值分别为M,Lili,20
D. SQL语句不正确,执行失败。
解析:首先排除B,既然有默认值,那么执行出来的结果就不可能是NULL。有默认值的age可以在VALUES值代入的时候显示“default”,也可以直接不用理会,直接不显示地填充值(注意:不是NULL,NULL是真的表结构规定的时候允许使用NULL而且真的没有相应值代入的时候才去使用)
注意:以上加粗的办法是最可行的,在有些版本的MySQL中并不支持直接不显示默认值的方法,会有出错提醒。
8. 在使用insert…into插入记录时,对于AUTO_INCREMENT列,若需要使其值自动增长,下面填充方式中错误的是(D)
A. 填充NULL值; B.不显示地填充值; C.填充数字0; D.填充数字1;
解析:填充数字0和1是制定默认值的时候;而自动增长通常会返回1即可,也可填充NULL值或者不显示地填充值。
※使用SELECT语句时,WHERE子句必须位于GROUP子句之前,GROUP子句必须位于HAVING子句之前。
例1:在MySQL数据库中执行“SELECT 1+4-2”运算。
Mysql>select 1+4--2;
※使用*可以返回所有列的数值。
例2:查询数据库mytest中表students中学生的姓名、年龄和专业信息。
mysql> select student_name,student_age,student_major
-> from mytest.students;
例3:查询数据库mytest中表students学生的所有信息。
Mysql>select * from mytest.students;
※使用别名的方法:
例4:查询数据库mytest中表students的student_name 和student_contact字段,并且要求student_contact列用“联系方式”来显示。
mysql> select student_name,student_contact as '联系方式'
-> from mytest.students;
或者
mysql> select student_name,student_contact 联系方式
-> from mytest.students;
※计算列值:
例5:查询数据库mytest的表students,输出每个学生的student_name和student_id列,同时要求输出student_id 加上数字100后构成的新列的值。
Mysql>select student_name,student_id,student_id+100
->from mytest.students;
※替换查询结果中的数据:在对表进行查询的时候,如果希望得到某些列的分析结果,而不仅仅是查询的原始值,则可以在SELECT语句中替换这些列。
CASE表达式:
WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
……
ELSE 表达式
END [AS 列名]——列名可更改也可以不更改。
例6:查询数据库mytest中表students,输出student_name 和student_sex列,判断student_sex,如果为0,则显示为“男”,否则显示为“女”,并且在结果集中用“性别”来标注该列。
mysql> select student_name, /*要记得这里的逗号*/
-> case
-> when student_sex='0' then '男'
-> else '女'
-> end as '性别'
-> from mytest.students;
※聚合函数:MySQL中的内置函数,常常用于对一组值进行计算或者统计,然后返回计算或者统计结果。
例7:查询mytest中students表的年龄最大值。(这里不需要用聚合函数)
Mysql>select max(student_age) from mytest.students;
※连接查询的类型以及使用方法:
①交叉连接:用于实现一张表的每一行与另一张表的每一行的笛卡尔积,返回两张表的每一行相乘的所有可能的搭配结果。
例8:假设数据库中有两张表,分别是a和b,要求查询这两张表的交叉连接后的结果集。
首先查看a表中的数据行:
Mysql>select * from mytest.a;
id
name
1
a1
2
a2
接着查看b表中的数据行:
Mysql>select * from mytest.b;
id
name
1
b1
2
b2
3
b3
计算a表和b表交叉连接的结果:
Mysql>select * from mytest.a cross join mytest.b;
id
name
id
name
1
a1
1
b1
展开阅读全文