2月15日
一、下载
shi操作步骤
1.登录www.mysql.com网站
2.在网页中单击downloads
3.在网页中单击“MySQL Community Server”
4.找到相应的版本单击“downloads”
实践:
例如:尝试下载任意版本的MySQL
二、安装
操作步骤
1、单击安装配件
2、完成相应配置
密码建议123456
3、单击finish完成安装
三、实践
例如:在你的操作系统下完成MySQL的安装
课后任务:完成MySQL安装并完成职教云头脑风暴
2月20日
思政目标:精益求精
首先代码编辑要正确,拼写、大小写
其次标点符号,全部英文标点符
一、导入onlinedb.sql案例库
1.操作步骤
第一步登录MySQL
第二步创建一个数据库“onlinedb”数据库
drop database onlinedb;#删除以前的online数据库
creat database onlinedb;
第三步使用onlinedb数据库,即打开onlinedb
use onlinedb;
第四步将onlinedb数据库脚本文件开发,并完成复制(用记事本打开)
ctrl+a
ctrl+c
第五步在命令行中实现粘贴
将光标放到工具的标题栏单击鼠标右键,选择编辑,粘贴
第六步测试数据导入情况
select*from users;
2.实践
例如:练习onlinedb的导入。
二、MySQL文件夹认知(了解)P8
1、包含文件夹
bin
share
include
lib
data
my.ini
三、启动和停止MySQL服务
1、方法分类:窗口操作法和命令行法
2、窗口操作法
任务场景:假设你想登录MySQL输入密码后闪退,这个问题一般情况下是服务没有启动的问题。最佳的解决方案启动服务即可。
(1)启动步骤
第一步打开控制面板
第二步打开服务对话框
第三步找到MySQL服务,单击右键选择启动。
课后任务:
1.复习案例库导入
2.复习空口法启动服务
2月22日
一、使用net命令启动和停止MySQL服务
1、格式
net start 服务名称
net stop服务名称
2.实践
例如:尝试完成服务
第一步打开命令行
在运行中输入cmd
第二步在命令行输入
net start mysql57
net stop mysql57
注意:服务名称不是唯一的,大家需要查看操作系统的信息
二、登录MySQL服务器
1.格式
mysql -h hostname -u username -p
mysql为登录命令名,存放在MySQL的安装目录下的bin的目录下。
-h表示后面的参数hostname为服务器的主机地址,当客户端与服务器在同一台机器上时hostname可以使用localhost或127.0.0.1。
-u表示后面的参数username为登录mysql服务的用户名。
-p表示后面的参数为指定的用户的密码。
2.实践
例如:使用命令行登录MySQL
第一步启动cmd
第二步切换路径到bin目录下
cd..
cd..
切换到c盘根目录
cd"C:\Program Files\MySQL\MySQL Server 5.7\bin"
第三步输入登录命令
mysql -h localhost -u root -p
单击回车
输入密码
三、mysql相关命令
1.命令参阅p11表1-1
2.实践
例如:尝试使用mysql命令
2月27日
一、数据概念
二、数据库概念
三、数据库管理系统概念
四、数据系统概念
五、关系型数据库概念
六、SQL语句分类
1.DDL
create alter drop等包含数据库定义语句
2.DML
insert、update、delete等数据库的数据操作语句
3.DCL
实现对象的访问权限以及数据库操作事务的控制
grant、revoke、commit、rollback等
七、MYSQL图形化操作界面工具
navicat和workbench
八、字符集设置
任务场景:当向表中插入中文数据、查询包括中文字符的数据时,可能会出现乱码现象。
1.字符集分类
MYSQL一共有41种字符集,对于我们记住
utf8:通用转换格式。使用它不会出现乱码!!!
实践:尝试体验中文乱码报错。
#创建数据库trydb
create database trydb;
#切换数据库
use trydb;
#删除数据表user
DROP TABLE user;
#创建数据表user
CREATE TABLE user(name varchar(11) DEFAULT NULL)ENGINE=InnoDB DEFAULT CHARSET=latin1;
#在表中添加数据
insert into user value("carl");
insert into user value("哈哈");
课后任务
1.掌握数据基本概念
2.完成线上头脑风暴
3月1日
一、查看字符集和校对规则
SHOW CHARACTER SET[like'匹配模式'|where条件表达式]
2.实践
实践:查看数据库管理系统的字符集类型有哪些
SHOW CHARACTER SET;
二、校对规则
1\查看字符集校对规则语法格式
SHOW COLLATION LIKE '匹配模式'
2、实践
例如:查看utf8相关字符
SHOW COLLATION LIKE 'utf8%';
三、字符设置
1、MySQL支持服务器(Serve)、数据库(Database)、表(Table)、字段(Filed)和连接层(Connection)这五个层级的字符集设置。
2、语法格式
set 系统变量名=字符集名称
系统变量名:参阅p17表1-2
3.实践
例如:使用MySQL命令修改字符集
MySQL的SET命令可以修改变量的值,修改当前MySQL服务器中各字符集的SQL命令如下:
#设置客户端字符集
mysql> SET character_set_client =utf8;
#设置连接层字符集
mysql> SET character_set_connection =utf8;
#设置数据库默认字符集
mysql> SET character_set_database =utf8;
#设置查询结果集
mysql> SET character_set_results =utf8;
#设置服务器字符集
mysql> SET character_set_server =utf8;
3.8日
一、解决任务场景汉字不能正确插入的问题
例如:回顾任务场景案例,完成user数据表的创建和导入
操作步骤如下:
创建一个数据库trydb
create database trydb;
use trydb;
#删除数据表user
DROP TABLE user;
#创建数据表user
CREATE TABLE user(name varchar(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET =utf8;
#在表中添加数据
insert into user values("carloorne");
insert into user values("哈哈");
#查询user数据表中的数据
Select * from user;
二、创建数据库
任务场景:完成网上商城数据库的逻辑设计后,接下来的工作就是要在MySQL数据库管理系统中创建该数据库,并实现相应的配置和管理工作。本任务将介绍使用Navicat可视化界面和命令行两种方式实现OnlineDB数据库的创建和维护。
1、格式
CREATE DATABASE 数据库名
[DEFAULT] CHARACTER SET 编码方式
[DEFAULT] COLLATE 排序规则
语法说明如下:
CREATE DATABASE:是SQL语言中用于创建数据库的命令;
数据库名:表示待创建的数据库名称,该名称在数据库服务器中是唯一的;
[DEFAULT] CHARACTER SET :指定数据库的字符集名称
[DEFAULT] COLLATE collation_name:指定数据库的排序规则名称
2、实践
例如:使用MySQL语句创建名为onlinedb的数据库,默认字符集设置为gb2312,排序规则设置为gb2312_chinese_ci,显示结果如下。
drop database onlinedb;
CREATE DATABASE onlinedb CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
三、查看数据库
1、格式
SHOW DATABASES;
2、实践
例如:使用SHOW DATABASES语句查看数据库服务器中的数据库。
SHOW DATABASES;
四、查看自己创建的数据库属性
1、格式
SHOW CREATE DATABASE 数据库名;
2、实践
例如:使用SHOW语句,查看数据库onlinedb的信息。
SHOW CREATE DATABASES onlinedb;
3.13日
一、修改数据库
1、格式
ALTER DATABASE 数据库名
[DEFAULT] CHARACATER SET:编码方式
[DEFAULT] COLLATE :排序规则
语法说明如下:
ALTER DATABASE:是SQL语言中用于修改数据库的命令
数据库名:表示待创建的数据库名称,该名称在数据库服务器中是唯一的
[DEFAULT] CHARACATER SET:指定数据库的字符集名称
[DEFAULT] COLLATE collation _name:指定数据库的排序规则名称
2、实践
例如:使用MySQL语句,修改数据库onlinedb的字符集设置为utf8,排序规则设置为utf8_bin
drop database onlinedb;
CREATE DATABASE onlinedb CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
SHOW CREATE DATABASE onlinedb;
ALTER DATABASE onlinedb CHARACTER SET utf8 COLLATE utf8_bin;
SHOW CREATE DATABASE onlinedb;
二、删除数据库
学习提示:删除数据库会删除该数据库中所有的表和所有数据,且不能恢复,因此在执行删除数据库操作时要慎重。
1、格式
DROP DATABASE 数据库
2、实践
例如:删除数据库服务器中名为onlinedb
show databases;
drop database onlinedb;
show databases;
三、存储引擎
1、存储引擎就是数据 的存储技术。针对不同的处理要求,对数据采用不同的存储机制、索引技巧、读写锁定水平等,在关系数据库数据的是以表的形式进行存储,因此存储引擎即为表的类型。
2、数据库的存储引擎功能:
决定了数据表在计算机中的存储方式,DBMS使用数据存储引擎进行创建、查询、修改数据。MySQL数据库提供多种存储引擎,用户可选择合适的存储引擎,获得额外的速度或功能,从而能改善应用的整体功能。MySQL的核心就是存储引擎。
3、分类
(1)InnoDB存储引擎
InnoDB是MySQL的默认事务性引擎,也是最重要的、使用最广泛的存储引擎,被设计用来处理大量短期(short-lived)事务。InnoDB的性能和自动崩溃恢复特性,使得它在非事务型存储的需求中也很流行,在MySQL- -般优先考虑InnoDB引擎。
(2) MyISAM存储引擎
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数,广泛应用在Web和数据仓储应用环境下,但不支持事物和等级锁,崩溃后无法安全恢复等。由MyISAM引擎设计简单,数据以紧密格式存储,对只读的数据性能较好。
比如:检索论文的中国知网
(3) Memory存储引擎
Memory存储引擎将表中的数据存储到内存中,不需要进行磁盘I/O,且支持Hash索引,因此查询速度非常快,主要适用于目标数据较小,而且被非常频繁地访问的情况。
(4) C5v存储引擎
CSV存储弓|擎可将普通的CSV文件(逗号分割值的文件)作为MySQL的表来处理。CSV引擎可以在数据库运行时拷贝文件,可以将Exce|电子表格软件中的数据存储为CSV文件,并复制到MySQl的数据目录中,就可以在MySQL中打开。
3.15日
一、查看MySQL支持的存储引擎
1、格式
SHOW ENGINES;
2、实践
例如查看MySQL服务器系统支持的存储引擎。
SHOW ENGINES;
二、查询系统默认的存储引擎
1、格式
SHOW VARIABLES LIKE 'STORAGE_ENGINE';
2、实践
例如:查询系统默认的存储引擎。
SHOW VARIABLES LIKE 'default_STORAGE_ENGINE';
3、整型
(1)、分类
TINYINT、SMALLNT、MEDIUMINT、INT(掌握)、BIGNT
(2)、实践
例如:创建整型数据的数据表test_int
drop database onlinedb;
create database onlinedb;
use onlinedb;
create table test_int
(int_1 int,
int_2 int unsigned,
int_3 int(6) zerofill,
int_4 tinyint,
int_5 tinyint unsigned);
查看数据表数据
select * from test_int;
向数据表中插入数据
insert into test_int values(100,100,100,100,100);
插入有问题的数据
insert into test_int values(100,-100,100,100,100);
查看数据表数据
select * from test_int;
四、小数
1、分类
浮点数和定点数
浮点数:数据值取近似值
定点数:数据取精确值
FLOAT、DOUBLE、DECIMAL(M,D)或DEC(M,D)
2、格式
数据类型(M,D)
M:精度数据的总长度
D:数据点后面的位数
3.实践
例如:尝试创建test_dec数据表
create table test_dec
(float_1 float(10,2),
float_2 double(10,2),
decimal_3 decimal(10,2));
查看数据表数据
select * from test_dec;
插入数据
insert into test_dec
values(12345678.99,12345678.99,12345678.99);
查看数据表数据
select * from test_dec;
3.20 日
一、日期类型
1、分类
YEAR类型表示年份、DATE类型表示日期、TIME类型表示时间、DATETIME和IMESTAMP表示日期时间
2、实践
drop database onlinedb;
create database onlinedb;
use onlinedb;
create table test_date
(year_1 year,
date_2 date,
time_3 time,
datetime_4 datetime,
timestamp_5 timestamp);
应用函数完成数据的插入:
insert into test_date
values(now(),current_date,current_time,current_timestamp,current_timestamp);
查询
select*from test_date;
二、字符型
1、分类
字符串类型是在数据库中存储字符串的数据类型。
字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM、SET
2、实践
例如:尝试使用varchar数据类型
create table test_char1
(varchar_1 varchar(65535));
create table test_char1
(varchar_1 varchar(21845));
create table test_char1
(varchar_1 varchar(21844));
例如:尝试定义test_char2数据表。
create table test_char2
(varchar_1 varchar(21844),
char_2 char(10));
create table test_char2
(char_2 char(10));
create table test_char2
(varchar_1 varchar(21834),
char_2 char(10));
3.22日
一、JSON数据类型
1、定义
一种轻量级数据交换格式。
2、分类
对象和数据
3、格式
对象:{键:值}
例如:{“性别”:“女”}
数组:[值,值,值]
例如:["星期一","星期二"]
4、实践
例如:创建test_json表,测试json类型的数据存储。
drop database onlinedb;
create database onlinedb;
use onlinedb;
create table test_json
(json_1 json,
json_2 json);
insert into test_json values
('{"u_num":"001","uname":"李鑫"}',
'["星期一","星期二"]');
查询数据填充
select*from test_json;
二、查看数据表
1、表定义:关系数据表中,表是以行和列的形式组织起来的,数据存在于行和列相交的单元格中,一行数据表示一条唯一的记录,一列数据表示一个字符,唯一标识一行记录的属性称为主键。
2、格式
show tables;
3、实践
例如:查看onlinedb数据库数据表
show tables;
三、创建数据表
1、格式
CREATE TABLE表名(字段定义1,字段定义2,...字段定义)
表名:表示所要创建的表的名称:
字段定义:定义表中的字段。包括字段名、数据类型、是否允许为空,指定默认值、主键约束、唯-性约束、注释字段、
是否为外键以及字段类型的属性等。字段定义格式如下。
字段名类型[NOT NULL | NULL] [DEFAULT默认值][AUTO INCREMENT] [UNIQUE KEY I PRIMARY KEY][COMMENT 字符串’
]1[外键定义]
NULL (NOT NULL) :表示字段是否可以为空;
DEFUALT:指定字段的默认值;
AUTO_ INCREMENT: 设置字段为自增,只有整型类型的字段才能设置自增。自增默认从1开始,每个表只能有一个自增字段;
UNIQUE KEY:唯- -性约束;
PRIMARY KEY:主键约束;
COMMENT:注释字段;
外键定义:外键约束。
2、实践
例如:尝试完成user数据表的创建,ulD、uName、uPwd、uSex.
create table users
(ulD int(11),
uName varchar(30),
uPwd varchar(50),
uSex char(8));
插入数据
insert into users values(100,'王鑫','123456','男');
insert into users values(100,'王鑫','123456','男');
查询语句
select*from users;
3月27日
任务场景:通过数据尝试应用我们发现不完整的数据表的创建会让很多非法数据存放在数据表中,这样会产生软件运行异常。那么为了保证数据创建的完整性、一致性我们需要在创建数据表的过程中加入约束等规则。
一、避免数据的重复和空值
1、实践
例如:完成users数据表的创建,ulD、uName、uPwd、uSex,除此之外,
ulD列标题要求将来插入的数据非重复和非空数据,uName列标题要求将来插入的数据非空,
uPwd列标题要求将来插入的数据非空,uSex列标题要求将来插入一个默认值“男”。
注意:
primary key 约束,要求未来需要插入非重复和非空数据。
not null约束,要求未来需要插入非空数据。
default:要求未来需要自动插入数据或者修改数据。
删除数据库
drop database onlinedb;
创建数据库
create database onlinedb;
打开数据库
use onlinedb;
创建users数据表
create table users
(ulD int(11) primary key,
uName varchar(30) not null,
uPwd varchar(50) not null,
uSex char(8) default '男');
插入数据
insert into users values(100,'王鑫','123456','男');
insert into users values(100,'王鑫','123456','男');
通过这条记录添加的执行我们得到100这个数据值不可以重复插入两次,因为primary key主键约束 的存在不可以插入重复值。
insert into users(uName,uPwd)values('德华','123456');
通过这条记录添加的执行我们得到空值不可以插入ulD列标题下,因为primary key主键约束 的存在不可以插入空值。
insert into users(ulD,uPwd)values(200,'123456');
通过这条记录添加的执行我们得到空值不可以插入ulD列标题下,因为not null非空约束 的存在不可以插入空值。
insert into users values(300,'琳琳','123456','女');
insert into users(ulD,uName,uPwd)values(400,'德华','123456');
通过这条记录添加的执行我们得到usex列标题下的数据当我们不添加它的时候它可以自动的完成数据默认值“男”这个数据的添加,因为usex列标题下我们定义了default。
查看数据表中的数据
select*from users;
二、查看表结构
1、格式
desc table_name
2、实践
例如查看users数据表结构。
desc users;
三、使用show查看表结构
1、格式
show[full]columns from 表名
2、实践:查看users表结构
show full columns from users;
四、查看数据表创建语句
1、格式
show create table table_name;
2、实践
例如:查看users数据表创见语句
show create table users;
3月29日
一、纵向数据表的查看
1、格式
\g
2、实践
例如:尝试查看纵向数据表结构。
删除数据库
drop database onlinedb;
创建数据库
create database onlinedb;
打开数据库
use onlinedb;
创建users数据表
create table users
(ulD int(11) primary key,
uName varchar(30) not null,
uPwd varchar(50) not null,
uSex char(8) default '男');
desc users \G;
二、修改数据表名
1、格式
ALTER TABLE 旧表名 RENAME [TO] 新表名;
2、实践
例如:尝试将users修改为user。
show tables;
alter table users rename to user;
show tables;
三、修改字段名
1、格式
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
2、实践
例如:在数据库onlinedb中,将user表中名为uPwd字段名称修改为uPswd,长度改为可变20.、
desc user;
ALTER TABLE user CHANGE uPwd uPswd VARCHAR(20);
desc user;
四、修改字段的数据类型
1、格式
ALTER TABLE 表名 MODIFY 字段名 新数据类型;
2、实践
例如:在数据库onlinedb中,将user表中uPswd字段类型改为VARBINARY,长度为20。
desc user;
ALTER TABLE user MODOFY uPswd VARBINARY(20)
desc user;
4月10日
一、添加字段
1、格式
ALTER TABLE 表名 ADD 字段名 数据类型
[完整性约束条件][FIRST] AFTER 已存在的字段名;
2、实践
例如:在user表中增加字段uRegTime,用于存放用户的注册时间,其数据类型为TIMESTAMP;
删除数据库
drop database onlinedb;
创建数据库
create database onlinedb;
打开数据库
use onlinedb;
创建users数据表
create table user
(ulD int(11) primary key,
uName varchar(30) not null,
uPwd varchar(50) not null,
uSex char(8) default '男');
修改表结构添加字段名称
ALTER TABLE user ADD uRegTime TIMESTAMP;
查看表结构
desc user;
二、删除字段
1、格式
ALTER TABLE 表名 ADD 字段名 ;
2、实践
例如:删除user表中的字段uRegTime。
ALTER TABLE user DROP uRegTime ;
desc user;
三、修改表中的存储引擎
1、格式
ALTER TABLE 表名 ENGINE=存储引擎名;
2、实践
例如:修改user表的存储引擎为MylSAM;
show create table user;
ALTER TABLE user ENGINE=MyISAM;
show create table user;
四、表的复制
1、格式
CREATE TABLE 新表名 SELECT *FROM源表名;
2、实践
例如:复制user表的到users表。
向user数据表中填充数据
insert into user values(100,'王丽',123456,'女');
insert into user values(200,'张红',123456,'女');
select*from user;
show tables;
CREATE TABLE users SELECT *FROM user;
show tables;
desc users;
select*from users;
五、只复制表结构到新表
1、格式
CREATE TABLE 新表名 SELECT *FROM 源表名 WHERE FALSE;
2、实践
例如:复制user表的结构到temp表。
CREATE TABLE temp SELECT *FROM user WHERE FALSE;
desc temp;
select*from temp;
六、使用like复制表结构
1、格式
CREATE TABLE 新表名 LIKE 源表名 ;
2、实践
例如:使用like复制user表的结构到tempUser表。
CREATE TABLE tempUser LIKE user ;
desc tempuser;
select*from tempuser;
4月17日
复制表的部分字段和数据到新表
1、格式
CREATE TABLE 新表名 AS(SELECT 字段1,字段2....... FROM 源表名);
2、实践
例如:复制user表中uName和uPswd两列数据到newUser表。
删除数据库
drop database onlinedb;
创建数据库
create database onlinedb;
打开数据库
use onlinedb;
创建users数据表
create table user
(ulD int(11) primary key,
uName varchar(30) not null,
uPwd varchar(50) not null,
uSex char(8) default '男');
向数据表中填充数据
insert into user values(100,'王丽','123456','女');
insert into user values(200,'张红','123456','女');
查看user数据表中的数据情况
select*from user;
查看当前数据库中拥有那些数据表
show tables;
复制局部字段和数据到新表
CREATE TABLE newUser AS(SELECT uName,uPwd FROM user);
查看当前数据库中拥有哪些数据表
show tables;
查看newUser数据表表结构
desc newUser;
查看newUser数据表中的数据
select*from newUser;
二、删除数据表
1、格式
DROP TABLE 表名;
2、实践
例如:删除newUser数据表。
drop table newuser;
例如:删除两张数据表。
CREATE TABLE newUser AS(SELECT uName,uPwd FROM user);
DROP TABLE newuser,user;
show tables;
三、约束
1、定义:
数据的完整性指的是数据的准确性和逻辑一致性,用来防止数据库中存在不符合语义规定的数据或者因错误信息的输入输出造成无效操作或错误信息。
2、分类
主键:数据非空、非重复
非空:数据非空
默认值约束:用于指定字段的默认值
唯一约束:非重复
检查约束:用于指定字段取范围值
外键约束:限定两张数据表之间的约束
四、主键
1、格式
列一级
字段名 数据类型 PRIMARY KEY
表一级
constraint 约束名 primary key(column)
2、实践
例如:尝试给user数据表uid定义主键约束
drop database onlinedb;
create database onlinedb;
use onlinedb;
创建没有约束的user
create table user
(uID int(11),uName varchar(30) not null);
尝试感受插入空值和重复数据
insert into user value(100,'王丽');
insert into user value(100,'张红');
insert into user(uName) value('刘毅');
select*from user;
尝试感受不可以填充空值和重复数据,创建列一级带约束的数据表结构
drop table user;
create table user
(uID int(11) ,uName varchar(30) not null,
primary key(uid));
尝试感受插入空值和重复数据
insert into user value(100,'王丽');
insert into user value(100,'张红');
insert into user(uName) value('刘毅');
select*from user;
例如:创建购物车信息表SCarlnfo,完成购物车复合主键约束的定义
CREATE TABLE SCarInfo
(gdID INT,uID INT,
scNum INT,
PRIMARY KEY(gdID,uID));
插入测试数据
insert into scarinfo values(10,10,10);
insert into scarinfo values(10,10,10);
insert into scarinfo values(20,20,10);
insert into scarinfo(scnum) values(10);
insert into scarinfo(uid,scnum) values(30,10);
查看数据表中的数据填充
select*from scarinfo;
一、非空约束(not null)
1、格式
column datatype not null
2、实践
例如:实践非空约束
drop table user;
create table user
(uID int(11) ,uName varchar(30) not null);
尝试感受插入空值和重复数据
insert into user value(100,'王丽');
insert into user(uid) value(200);
查看数据表中的数据
select*from user;
4月20日
课程思政:软件的易用性
一、默认值约束
1、格式
属性名 数据类型 DEFAULT 默认值
2、实践
例如:尝试定义数据表默认值
定义没有默认值的数据表
drop database onlinedb;
create database onlinedb;
use onlinedb;
CREATE TABLE SCarInfo
(gdID INT,uID INT,scNum INT,
PRIMARY KEY(gdID,uID));
尝试插入测试数据感受没有默认值的状态
insert into scarinfo value(10,10,3);
insert into scarinfo(gdid,uid) value(20,20);
查看数据表数据
select*from scarinfo;
定义有默认值的数据表
drop table scarinfo;
CREATE TABLE SCarInfo
(gdID INT,uID INT,scNum INT,
PRIMARY KEY(gdID,uID));
尝试插入测试数据感受没有默认值的状态
insert into scarinfo value(10,10,3);
insert into scarinfo(gdid,uid) value(20,20);
查看数据表数据
select*from scarinfo;
二、unique
1、定义
UNIQUE约束又称唯一性约束,是指数据表中一列或一组列中只包含唯一值。
2、格式
属性名 数据类型 UNIQUE
3、实践
例如:尝试创建唯一性约束。
创建无唯一约束数据表
create table user(uid int primary key,
uname varchar(20) );
尝试向数据表中填充数据
insert into user values(100,'王易');
insert into user values(200,'王易');
查看数据表中的数据
select*from user;
创建列一级唯一约束数据表
drop table user;
create table user(uid int primary key,
uname varchar(20),unique);
尝试向表中填充数据
insert into user values(100,'王易');
insert into user values(200,'王易');
查看数据表中的数据
select*from user;
创建表一级唯一约束数据表
drop table user;
create table user(uid int primary key,
uname varchar(20),unique);
尝试向表中填充数据
insert into user values(100,'王易');
insert into user values(200,'王易');
查看数据表中的数据
select*from user;
三、FOREING KEY约束
1、定义
FOREING KEY约束又称外键约束,它与其它约束不同的之处在于,约束的实现不了只在在意表中进行,而是在表中的数据与另一个表中的数据之间的联系。
2、格式
4月22日
一、表之间的关系
1、数据库中存在的数据表之间都有一定的关系
2、建立两张数据表的简单方法就是找到两张数据表中相同的列标题】
3、分清主表(父表)、从表(子表)
建立关联的列标题是其中一张表的主键,那么这张表就是主表。另一张表就是从表。
二、FOREIGN KEY 约束
1、格式
表一级
CONSTRAINT 外键名 FOREIGN KEY(外键字段名)
REFERENCES 主表名(主键字段名)
列一级
column datatype FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
2、实践
例如:尝试完成外键约束的创建
创建没有外键约束的数据表
drop database onlinedb;
create database onlinedb;
use onlinedb;
第一步创建goodstype数据表
create table goodstype(tid int primary key,tname varchar(20));
第二步创建goods数据表
create table goods(gid int primary key, tid int,gname varchar(20));
第三步填充数据
insert into goodstype values(1,'电子设备');
insert into goodstype values(2,'图书');
insert into goods values(1000,10,'华为手机');
insert into goods values(2000,12,'python数据分析');
第四步查看数据表中的数据
select*from goodstype;
select*from goods;
drop table goodstype;
drop table goods;
创建有外键约束的数据表
第一步创建goodstype数据表
create table goodstype(tid int primary key,tname varchar(20));
第二步创建goods数据表
create table goods(gid int primary key, tid int,gname varchar(20),
constraint goods_tid_fk foreign key(tid) references goodstype(tid));
第三步填充数据
insert into goodstype values(10,'电子设备');
insert into goodstype values(20,'图书');
insert into goods values(1000,10,'华为手机');
insert into goods values(2000,12,'python数据分析');
第四步查看数据表中的数据
select*from goodstype;
select*from goods;
4月24日
假定将goodstype数据表的tid为10的数据修改为30
update goodstype
set tid=30
where tid=10;
假定将goodstype数据表的tid为10的数据删除
delete goodstype
where tid=10;
通过以上测试我们得到外键约束数据制约的两个特性
1、插入数据主表制约从表的数据
2、修改和删除数据是从表制约主表的数据
但是在软件应用的过程中,我们很确定要修改或者删除主表中的数据。我们是否可以通过级联修改或者删除主表中的数据完成数据的修改?
如果使用外键约束定义的可选项如 on delete cascade 和 on update cascade就可以解决以上问题。、
一、on delete cascade 的使用
1、格式
表一级
CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)on delete cascade
2、实践
例如:尝试使用on delete cascade外键约束
第一组体会没有on delete cascade外键约束
drop database onlinedb;
create database onlinedb;
use onlinedb;
创建外键约束的数据表
第一步创建goodstype数据表
create table goodstype(tid int primary key,tname varchar(20));
第二步创建goods数据表
create table goods(gid int primary key, tid int,gname varchar(20));
第三步填充数据
insert into goodstype values(1,'电子设备');
insert into goodstype values(2,'图书');
insert into goods values(1000,10,'华为手机');
insert into goods values(2000,12,'python数据分析');
第四步查看数据表中的数据
select*from goodstype;
select*from goods;
第五步将goodstype数据表的tid为10的数据修改为30
update goodstype
set tid=30
where tid=10;
第二组体会on delete cascade外键约束
drop table goodstype;
drop table goods;
创建有外键约束的数据表
第一步创建goodstype数据表
create table goodstype(tid int primary key,tname varchar(20));
第二步创建goods数据表
create table goods(gid int primary key, tid int,gname varchar(20),
constraint goods_tid_fk foreign key(tid) references goodstype(tid) on update cascade);
第三步填充数据
insert into goodstype values(10,'电子设备');
insert into goodstype values(20,'图书');
insert into goods values(1000,10,'华为手机');
insert into goods values(2000,12,'python数据分析');
第四步查看数据表中的数据
select*from goodstype;
select*from goods;
第五步将goodstype数据表的tid为10的数据修改为30
update goodstype
set tid=30
where tid=10;
第六步查看数据表中的数据
select*from goodstype;
select*from goods;
二、on delete cascade
CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)on delede cascade
实践
例如:尝试使用on update cascade.
drop database onlinedb;
create database onlinedb;
use onlinedb;
第一组体会没有on delete cascade外键约束
第一步创建goodstype数据表
create table goodstype(tid int primary key,tname varchar(20));
第二步创建goods数据表。
create table goods(gid int primary key,tid int,gname varchar(20),
constraint goods_tid_fk foreign key(tid) references goodstype(tid));
第三步填充数据
insert into goodstype values(10,'电子设备');
insert into goodstype values(20,'图书');
insert into goods values(1000,10,'华为手机');
insert into goods values(2000,12,'python数据分析');
第四步查看数据表中的数据
select * from goodstype;
select * from goods;
第五步将goodstype数据表的tid为10的数据修改为30
delete from goodstype
where tid=10;
第二组体会on update cascade外键约束
drop table goods;
drop table goodstype;
第一步创建goodstype数据表
create table goodstype(tid int primary key,tname varchar(20));
第二步创建goods数据表。
create table goods(gid int primary key,tid int,gname varchar(20),
constraint goods_tid_fk foreign key(tid) references goodstype(tid) on delete cascade);
第三步填充数据
insert into goodstype values(10,'电子设备');
insert into goodstype values(20,'图书');
insert into goods values(1000,10,'华为手机');
insert into goods values(2000,12,'python数据分析');
第四步查看数据表中的数据
select * from goodstype;
select * from goods;
第五步将goodstype数据表的tid为10的数据修改为30
delete from goodstype
where tid=10;
第六步查看数据表中的数据
select * from goodstype;
select * from goods;
4、26
一、约束删除
1、格式
alter table 表名 drop 约束类型[约束名]
2、实践
例如:尝试在goods数据表中删除goods_tid_fk约束。
alter table goods drop foreign key goods_tid_fk;
二、插入数据
1、格式
INSERT INTO 表名 [(字段列表)] VALUES(值列表);
2、实践
例如:尝试向GoodsType数据表中填充数据,名称为“学习用品”的类别,其中类别ID为1.
select * from goodstype;
INSERT INTO GoodsType VALUES(1,"学习用品");
select * from goodstype;
例如:尝试向GoodsType数据表中填充数据,其中类别ID为4.
select * from goodstype;
INSERT INTO GoodsType(tid) VALUES(4);
select * from goodstype;
三、replace
1、格式
REPLACE INTO 表名[字段列表)] VALUES(值列表);使用REPLACE时,首先尝试插入到数据表中,若检测表中已经有该记录(通过主键或唯一约束判断),则先删除此记录,然后再插入新的数据。
2、实践
例如:尝试向GoodsType数据表中填充数据,名称为“汽车用品”的类别,其中类别ID为1。
select * from goodstype;
INSERT INTO GoodsType VALUES(1,'汽车用品');
select * from goodstype;
replace INTO GoodsType VALUES(1,'汽车用品');
select * from goodstype;
5月6日
一、多条语句添加(insert)
1、格式
INSERT INTO 表名[(字段列表)] VALUES(值列表1)(值列表2)....(值列表n)];
2.实践
例如:尝试向users表中添加三条新纪录
创建没有外键约束的数据表
drop database onlinedb;
create database onlinedb;
use onlinedb;
第一步创建user数据表
create table users(uid int primary key,uname varchar(20));
第二步查看数据表中的数据
select*from users;
第三步添加数据。
insert into users values(10,'王函'),
(20,'张申'),(30,'高申');
第四步查看数据表中的数据
select*from users;
二、多条语句添加(replace)
1、格式
replace INTO 表名[(字段列表)] VALUES(值列表1)(值列表2)....(值列表n)];
2.实践
例如:尝试向users表中添加三条新纪录,如果记录有重复的实行替换。
创建没有外键约束的数据表
drop database onlinedb;
create database onlinedb;
use onlinedb;
第一步创建user数据表
create table users(uid int primary key,uname varchar(20));
第二步查看数据表中的数据
select*from users;
第三步添加数据。
replace into users values(10,'刘静'),
(20,'张琴'),(30,'王雨');
第四步查看数据表中的数据
select*from users;
三、添加和修改系统数据--插入数据
1、格式
INSERT INTO 目标数据表(字段列表1)
SELECT 字段列表2 FROM 源数据表 WHERE 条件表达式;
2、实践
例如:尝试将user数据表中的uname为王雨用户的信息填充到users1数据表中
第一步创建users1数据表。
create table users1(uid int primary key,uname varchar(20));
第二步查看数据表中数据
select * from users1;
第三步填充数据
INSERT INTO users1(uid,uname)
SELECT uid,uname
FROM users
WHERE uname='王雨';
第四步查看数据表中的数据
select*from users1;
四、INSERT语句的其他语法格式
1.格式
INSERT INTO 表名
SET 字段名1=值1[字段名2=值2,...]
2.实践
例如: 尝试向users表中添加数据,其中uid的值为40,uName的值为“贾炜”
第一步查看数据表中数据
select * from users;
第二步填充数据
INSERT INTO users
SET uid=40,
uname='贾炜';
第三步查看数据表中数据
select * from users;
5月10日
一、查询基本结构
1、格式
SELECT [ALL| DISTINCT ]*| 列名1[,列名2,......列名n]
FROM 表名
[WHERE条件表达式]
[GROUP BY 列名[ASC| DESC] [HAVING 条件表达式]]
[ORDER BY列名 [ASC| DESC],...]
[LIMIT [OFFSET] 记录数]
·SELECT 子句: 表示从表中查询指定的列
·FROM子句: 表示查询的数据源,可以是表或视图
WHERE子句: 用于指定查询筛选条件。
·GROUP BY子句: 用于将查询结果按指定的列进行分组;其中HAVING为可选参数,用
于对分组后的结果集进行筛选。
ORDER BY子句:用于对查询结果集按指定的列进行排序。
LIMIT子句: 用于限制查询结果集的行数。参数OFFSET为偏移量,当OFFSET值为0时表示从查询结果的第1条记录开始,如果OFFSET为1时,表示查询结果从第2条记录开始.
二、关键字“*”
1、功能
替代数据表中所有的列标题
2、格式
select*
3、实践
例如:GoodsType(商品类别表)中所有的商品类别信息
use onlinedb;
select*from GoodsType;
三、查询指定的列
1、格式
SELECT 列名1[列名2,......列名n]
2、实践
例如:查询Goods(商品信息表)中所有的商品编号,名称,价格和销售数量。
desc goods;
SELECT gdCode,gdName,gdPrice,gdSaleQty
FROM Goods;
四、计算列值
1、格式
select 算术表达式
2、实践
例如:查询Goods中每件商品的销售总价,其中销售总价=销售数量*销售价格,显示商品名称和销售总价。
SELECT gdName,gdSaleQty*gdPrice
FROM Goods;
五、使用函数计算列值
1、格式
select 函数
2、实践
例如:查询Users(用户信息表)中,用户名和年龄。
注意
year()函数:获取日期时间的年份
now()函数:获取当前系统的时间
SELECT uName,year(now())-year(uBirth)
FROM Users;
六、AS关键字使用
1、功能给数据查询结果起一个新的列标题名称
2、格式
select原列表题名称 as 新列标题名称
3、实践
例如: 查询Users(用户信息表)中,用户名字和年龄,在显示数据的时候列标题分别为姓名和年龄。SELECT uName as 姓名,year(now())-year(uBirth) as 年龄
FROM Users;
七、使用比较运算符
1、分类
>、<、>=、<=、<>
2. 实践
例如:查询Users表中uID为8的用户姓名
SELECT uID,uName
FROM Users
WHERE uID=8;
5月15日
一、逻辑运算符
1. 分类
与:and
或:or
非:not
2. 格式
where 表达式 逻辑运算符 表达式
3. 实践
例如:查询Users表中2000年后出生的用户,且性别为"男"的用户姓名,电话号码,出生年月
打草稿
2000年后出生的用户:year(uBirth)>2000
性别为"男":uSex='男'
2000年后出生的用户,且性别为"男":year(uBirth)>2000 and uSex='男'
最终获得where条件子句
year(uBirth)>2000 and uSex='男'
最终获得where条件子句
where year(uBirth)>2000 and uSex='男'
最后融合查询语句
select uname,uphone,uBirth
from users
where year(uBirth)>2000 and uSex='男';
例如:查询Goods表中gdPriced不大于50的商品名称
打草稿
gdpriced大于50
where gdpriced>50
不大于50的
where not(gdpriced>50)
最后融合查询语句
select gdname,gdprice
from goods
where not(gdprice>50);
例如:查询Goods表中gdCity值为“长沙或西安”,且gdPrice小于等于50的商品名称。
gdCity值为“长沙“:where gdCity='长沙'
gdCity值为“西安“:where gdCity='西安'
gdPrice小于等于50:where gdPrice<=50
where not(gdPrice>50)
逻辑运算
gdCity值为“长沙或西安”,且且gdPrice小于等于50
where (gdCity='长沙' or gdCity='西安' ) and gdPrice<=50;
最后融合查询语句
select gdName,gdprice,gdCity
from goods
where (gdCity='长沙' or gdCity='西安' ) and gdPrice<=50;
二、BETWEEN AND运算符
1、功能
来限制查询数据的范围
2、格式
WHERE 表达式 [NOT] BETWEEN 初始值 AND 终止值
3、实践
例如:查询Goods表中gdPriced在100到500元的商品名称。
SELECT gdName,gdPrice
FROM goods
WHERE gdPrice BETWEEN 100 AND 500 ;
三、IN运算符
1、功能
序列值的匹配
2、格式
WHERE 表达式 [NOT] IN (值1,值2...值N)
3、实践
例如:查询Goods表中gdCity为长沙、西安、上海三个城市的商品名称。
SELECT gdName,gdCity
FROM goods
WHERE gdCity in ('长沙','西安','上海');
5月17日
一、LIKE运算符
1、功能
模糊匹配
2、格式
WHERE 列名 [NOT] LIKE '字符串' [ESCAPE '转义字符' ]
s%:表示查询以s开头的任意字符串,如small
%任意字符申
%s:表示查询以s结尾的任意字符串,如address
%s%:表示查询包含s的任意字符串,如super. course
_:任何单个字符
_ s:表示查询以s结尾且长度为2的字符串,如as
s_ :表示查询以s开头且长度为2的字符串,如sa
3、实践
例如:查询Users表中gdName为“李”姓开头的用户姓名、性别、手机号
打草稿
gdname like '李%'
最后得到查询语句
use onlinedb;
SELECT uName,uSex,uPhone
FROM users
WHERE uName LIKE '李%';
例如:查询Users表中gdName第二个字为“湘”的用户姓名、性别、手机号
打草稿
gdname like '_湘%'
最后得到查询语句
SELECT uName,uSex,uPhone
FROM users
WHERE uName LIKE '_湘%';
注意:转义字符为“\”,比如在匹配字符过程中包含_或者%,我们需要使用转义字符让这两个通配符去掉通配功能。
打草稿
WHERE gdName LIKE '华为P9\_%'
最后得到查询语句
SELECT gdCode,gdName,gdPrice
FROM goods
WHERE gdName LIKE '华为P9\_%';
二、REGEXP运算符
1.功能
模糊匹配
2.格式
WHERE列名REGEXP‘模式串'
3.实践
例如:查询Users表中uPhone以 “5"结尾用户的姓名,性别和电话。
打草稿:
WHERE uPhone REGEXP '5$' ;
最后得到查询语句
SELECT uName,uSex,uPhone
FROM users
WHERE uPhone REGEXP '5$' ;
例如:查询Users表中uPhone以“16,17,18"开头用户的姓名,性别和电话。
打草稿
WHERE uPhone REGEXP '^1[678]' ;
最后得到查询语句
SELECT uName,uSex,uPhone
FROM users
WHERE uPhone REGEXP '^1[678]' ;
5月24日
一、使用 IS NULL运算符
1、格式
WHERE 列名 IS [NOT] NULL
2、实践
例如:查询Users表中ulmage为空的用户姓名和性别
打草稿:
WHERE ulmage IS NULL;
最后得到查询语句
SELECT uName, uSex,uPhone
FROM users
WHERE uImage IS NULL;
二、使用DISTINCT消除重复结果集
1、格式
select DISTINCT 列名
2、实践
例如:查询Goods表中gdPrice大于200的商品来源于哪些城市
SELECT DISTINCT gdCity
FROM goods
WHERE gdPrice>200;
三、数据排序
1、格式
ORDER BY {列名 | 表达式 | 正整数 } [ ASC | DESC ] [......n]
2、实践
例如:查询Goods表tID为1的商品编号、名称 和价格,并按价格升序排列、
打草稿
where tid=1
最后得到查询语句(升序)
select tid,gdname,gdprice
from goods
where tid=1
order by gdprice;
最后得到查询语句(降序)
select tid,gdname,gdprice
from goods
where tid=1
order by gdprice desc;
例如:查询Goods表tID为1的商品编号、名称、价格和销售量,并先按销售量降序,再价格升序排列。
打草稿
where tid=1
最后得到查询语句
SELECT gdCode,gdName,gdSaleQty,gdPrice
FROM goods
WHERE tID=1
ORDER BY gdSaleQty DESC,gdPrice;
三、使用LIMIT限制结果集返回的行数
1、格式
使用LIMIT限制结果集返回的行数
LMIT [OFFSETI记录数]
2、实践
例如:查询Goods表前3行记录的商品编号、名称和价格。
select*
from goods
limit 3;
6月5日
一、数据分组统计
1、格式
group by ......分组字段名称......
[having] 条件的限定
2、实践
组函数
SUM 返回表达式中所有值的和
AVG 返回组中各值的平均值
MAX 返回表达式中的最大值
MIN 返回表达式中的最小值
COUNT 返回组中的项数
GROUP_ CONCAT 返回一个字符串结果,该结果由分组中的值连接组合而成
例如:查询Goods表,统计所有商品的总销售量
use onlinedb;
select sum(gdSaleQty) from goods;
例如:查询Goods表,显示商品的最高价格
select max(gdPrice) from goods;
例如:查询Orders表,显示购买商品的人数
select count(DISTINCT uID) from orders;
例如:查询Users表,按uCity列进行分组。
select uID,uName,uSex,uCity
from users
group by uCity;
例如:查询Users表,统计各城市的用户人数。
select ucity,count(uid)
from users
group by ucity;
例如:查询Users表。将同一城市的uID值用逗号“,”连接起来,列名为uIDs.
select ucity,group_concat(uid) as uids
from users
group by ucity;
例如:查询Users表。将同一城市的uID值用逗号“_”连接起来,列名为uIDs.
select ucity,group_concat(uid order by uid separator '_') as uids
from users
group by ucity;
例如:
注意:groupby 和with rollup一起使用,可以输出每一类分组的汇总值。
select ucity,count(*)
from users
where ucity in('长沙','上海')
group by ucity
with rollup;
select ucity,count(*)
from users
where ucity in('长沙','上海')
group by ucity;
例如:查询Users表,统计各城市的用户人数,显示人数在3人以上的城市。
GROUP BY和HAVING 一 起使用
HAVING关键字和WHERE关键字都用于设置条件表达式对查询结果集进行筛选
HAVING关键字后可以跟聚合函数,且只能跟GROUP BY-起使用
SELECT uCity,COUNT(*)
FROM users
GROUP BY uCity
HAVING COUNT(*)>=3;
SELECT uCity,COUNT(*)
FROM users
GROUP BY uCity;
注意:where子句是对原始数据的条件限定,having子句是统计之后数据的条件限定
6月5日7、 8
一、任务场景
实际应用中,数据查询的要求通常要涉及多张数据表。连接是多表数据查询的一种有效手段。本任旁阐述外连接、交叉连控等连接方式,
灵活构建多表查询,以满足交际应用的需求。
二、多表连接分类
交叉连接
内连接
外连接
自连接
联合连接
三.交叉连接
1.概念
交叉连接是将左表中的每行记零与有表中的所有记录进行连接,返回的记录行数是两个表的乘积。
2、注意
交叉连接在软件做数据压力测试的时候让他出现除此之外尽量避免交叉连接的出现
3、格式
select column_name......
from table_name1 cross join table_name2;
4、实践
例如:查询会员能购买的所有可能的商品情况。列出uID、uName、gdID、gdName
select users.uID,users.uName,goods.gdID,goods.gdName
from users cross join goods;
四、内连接
1、概念
内连接(INNER JOIN):查询结果集返回与连接条件匹配的记录行,通常使用比较运算比较被连接的列值。
2、格式
SELECT [ALL | DISTINCT ]* |列名1列.....列名n]
FROM表1 [别名1] JOIN表2 [别名2]
[ON表1关系列=表2.关系列]
( WHERE条件表达式];
3、实践
例如:查询Goods表中商品类别为“服饰”的商品ID、名称、价格及类别名称。
商品ID(Goods)、名称(GOODS)、价格(GOODS)及类别名称(category)。
通过分析发现goods数据表中的cid和catagory数据表中的cid可以做两张数据表的连接桥梁,因此连接语句应该是
ON goods.cid=goodstype.tid
最后得到查询语句
select goods.gdid,goods.gdName,goods.gdPrice,goodstype.tname
from goods join goodstype
ON goods.tid=goodstype.tid
where goodstype.tname='服饰';
例如:查询每个用户的订单数,列出uID,uName,ordernum(订单数)
SELECT s.uid,uname,oTotal
FROM orders t RIGHT JOIN users s
ON s.uid=t.uid;
例如:查询用户名为“段湘林”购买商品的订单总金额。
通过分析发现本次涉及users和orders数据表。通过分析我们看到两张表都有
uid
on users.uid=orders.uid
最后得到的查询语句
SELECT uName,SUM(oTotal)
FROM users JOIN orders
on users.uid=orders.uid
WHERE uName='段湘林';
例如:查询uName值为“段湘林”的购物车中的商品名称,价格及购买数量
段湘林(users)
商品名称(goods)
购买数量(cart)
通过题设中三个关键词找到了三个数据源分类是goods、users、cart
接下来找三个表的连接条件
on users.uid=cart.uid
on cart.gid=goods.gid
得到from
from users join cart on users.uid=cart.uid
join goods on cart.gdid=goods.gdid
最后得到查询语句
select goods.gdname,goods.gdprice,scar.scnum
from users join scar on users.uid=scar.uid
join goods on scar.gdid=goods.gdid
where users.uname='段湘林';
6月6号
一、自连接
1、格式
select column
from table join table
2、实践
例如:查询与段湘林用户在同一个城市的用户,列出用户名、邮箱和城市名
通过关键词提取我们使用的数据源是users
通过查询需求得到连接条件
from users a join users b
on a.ucity=b.ucity
最后得到查询语句
select a.uname,a.uemail,a.ucity
from users a join users b
on a.ucity=b.ucity
where b.uname='段湘林' and a.uname!='段湘林';
二、外连接
1、分类
左外连接:首先返回表中相同的记录除此之外再返回左表中全部的记录
右外连接:首先返回表中相同的记录除此之外再返回右表中全部的记录
完全外连接:首先返回表中相同的记录除此之外再返回左右表中全部的记录
2、格式
左外连接
SELECT [ALL | DISTINCT] * |列名1[列.....列名n]
FROM表1 [别名1] left JOIN表2 [别名2]
[ON表1.关系列=表2.关系列]
[ WHERE条件表达式];
右外连接
SELECT [ALL | DISTINCT]*| 列名列.....列名n]
FROM表1 [别名1] right JOIN表2 [别名2]
[ON表1.关系列=表2.关系列]
[ WHERE条件表达式];
3、实践
例如:查询每个用户的订单金额,列出uID,uName,oTotal
uID,uName,oTotal请问这个查询会涉及哪些数据源
会涉及users,orders.
select s.uID,uName,oTotal
from users s LEFT JOIN orders t
ON s.uID=t.uID;
6月7号
1、任务场景
在多表查询过程中我们还会碰到没有关系的数据表查询结果的合并,在这样情况下我们需要使用联合查询。
2、概念
联合查询是将多个SELECT语句返回的结果集合并为单个结果集, 该结果集包含联合查询中的每一 个查询结果集的全部行,参与查询的SELECT语句中的列数和列的顺序必须相同,数据类型也必须兼容。
3、格式
4、实践
例如:联合查询uID值我=为1和2的用户信息,列出uid,uName,uSex。
列出uID,uName,uSex请问涉及到的数据源是哪张表?
users
第一步查询uid为1的用户信息
SELECT uID,uName,uSex
from users
where uid=1;
第二步查询uid为2的用户信息
SELECT uID,uName,uSex
from users
where uid=2;
第三步合并查询语句
SELECT uID,uName,uSex
from users
where uid=1
UNION
SELECT uID,uName,uSex
from users
where uid=2;
例如:联合查询tid值为1和2的商品信息,列出tid,gdname,gdprice,并按照gdPrice从高到低排序,显示前三行记录
列出tid,gdname,gdprice,并按照gdPrice从高到低排序请问需要涉及哪些数据源
goods
第一步查询tid为1的商品信息
SELECT tId,gdName,gdPrice
from goods
where tid=1;
第二步查询tid为2的商品信息
SELECT tId,gdName,gdPrice
from goods
where tid=2;
第三步合并查询语句
SELECT tId,gdName,gdPrice
from goods
where tid=1
UNION
SELECT tId,gdName,gdPrice
from goods
where tid=2;
第四步实现排序和显示前三行
SELECT tId,gdName,gdPrice
from goods
where tid=1
UNION
SELECT tId,gdName,gdPrice
from goods
where tid=2
ORDER BY gdPrice DESC LIMIT 3;
二、子查询
1、任务场景
子查询是多表数据查询的另一种有效方法,当数据查询的条件依赖于其他查询的结果时,使用子查询可以有效解决此类问题。本任务查询了子查询用作表达式的查询技巧
2、格式
select column
from table
where (subquery子查询)
3、实践
例如:查询商品类别为“服饰”的商品ID、名称、价格及销售量
根据题设请问涉及哪些数据源
goods(商品信息表)和goodsstype(商品类别表)通过分析这两张的类别id是相同的,可以作为桥梁
第一步查询商品类别为“服饰”的商品ID
select tID
from goodstype
where tname='服饰';
第二步查询tID=1的商品ID、名称、价格及销售量
select gdid,gdname,gdprice,gdSaleQty
from goods
where tid=1;
第三步使用子查询合并以上语句
select gdid,gdname,gdprice,gdSaleQty
from goods
where tid=(select tID
from goodstype
where tname='服饰');
三、使用比较运算符的子查询
1、格式
WHERE 表达式 比较运算符(子查询)
2、实践
例如:查询商品名称为“LED小台灯”的评价信息和评价时间
根据题设分析需要使用的数据源,需要使用
goods(商品名称)和orderdetail(评价信息和评价时间)
又通过分析我们发现这两张数据表都有gdid,因此我们将gdid作为这两张数据表的连接桥梁
第一步查询LED小台灯的gdid
select gdid
from goods
where gdname='LED小台灯';
第二步查询gdid=9的评价信息和评价时间
select devalution,odtime
from orderdetail
where gdid=9;
第三步合并查询语句
select devalution,odtime
from orderdetail
where gdid=(select gdid
from goods
where gdname='LED小台灯');
例如:查询比'LED小台灯'销售量要少的商品编号、商品名称、商品价格和商品销售量
通过分析我们发现使用goods数据源是不是就能找到商品信息
第一步我们需要先查询'LED小台灯'的销售量
select gdsaleqty
from goods
where gdname='LED小台灯';
第二步查询销售量比31少的商品编号、商品名称、商品价格
select gdid,gdname,gdprice
from goods
where gdsaleqty<31;
第三步将前两步的查询语句合并
select gdid,gdname,gdprice
from goods
where gdsaleqty<(
select gdsaleqty
from goods
where gdname='LED小台灯');
6月12日
一、使用IN关键字的子查询
1、格式
WHERE 表达式 [NOT] IN(子查询)
2、实践
例如:查询已购物的会员信息,包括用户名,性别,出生年月和注册时间
在这个查询中会涉及哪些数据源
orders,users
第一步在orders数据表中把UID查找出来
select UID
from orders;
第二步查询UID为1 3 9 8 4 3的用户信息
select uName,uSex,uBirth,uRegTime
from users
where uid in(1,3,9,8,4,3);
第三步合并以上查询语句
select uName,uSex,uBirth,uRegTime
from users
where uid in( select UID
from orders);
l例如:查询消费金额在1000元以上的会员信息,包括用户名、性别、年龄和注册时间。
在这个查询中会涉及哪些数据源
orders,users
第一步查询消费金额在1000元以上的会员信息
select uid
from orders
group by uid
having sum(ototal)>1000;
第二步查询UID为3 8 的用户信息
select uName,uSex,uBirth,uRegTime
from users
where uid in(3,8);
第三步合并以上两组查询语句
select uName,uSex,uBirth,uRegTime
from users
where uid in(select uid
from orders
group by uid
having sum(ototal)>1000);