SQL语句练习。

sql: structured query language(结构化查询语言)

用户名和密码:root


创建一个名称为mydb1的数据库。
create database mydb1;

查看所有数据库
show databases;

创建一个使用utf-8字符集的mydb2数据库。
create database mydb2 character set utf8;

创建一个使用utf-8字符集,并带校对规则的mydb3数据库。
create database mydb3 character set utf8 collate utf8_general_ci;

显示库的创建信息
show create database mydb3;

删除前面创建的mydb1数据库
drop database mydb1;

查看服务器中的数据库,并把其中某一个库的字符集修改为gb2312;
alter database mydb2 character set gb2312;
show create database mydb2;

备份库
1、准备库的数据
create database mydb1;
use mydb1;
create table test
(
	id int
);
insert into test(id) values(1);
select * from test;

2、备份库
  2.1 退出mysql客户端:quit
  2.2 在windows命令行窗口中下执行:mysqldump -uroot -p mydb1>c:\test.sql

3、删除库:drop database mydb1;

4、恢复库(1):
	4.1 创建库:create database mydb1;
	4.2 source c:\test.sql  (通过执行脚本文件实现)
5、恢复库(2):mysql -uroot -p mydb1<c:\test.sql  (window命令)


创建一个员工表
use mydb1;  进入库
create table employee
(
	id int,
	name varchar(20),
	gender varchar(4),
	birthday date,
	entry_date date,
	job varchar(40),
	salary double,
	resume text
)character set utf8 collate utf8_general_ci;

查看库中所有表
show tables;

查看表的创建细节
show create table employee;

查看表的结构
desc employee;

在上面员工表的基本上增加一个image列。
alter table employee add image blob;//存放小的2进制数据64K

修改job列,使其长度为60。
alter table employee modify job varchar(60); 

删除sex列。
alter table employee drop gender;

表名改为user。
rename table employee to user;

修改表的字符集为utf-8
alter table user character set gb2312;
show create table user;

列名name修改为username
alter table user change column name username varchar(20);

使用insert语句向表中插入一个员工的信息。
insert into employee(id,name,birthday,entry_date,job,salary,resume) values(1,'aaa','1980-09-09','1980-09-09','bbb',1000,'bbbbbbbb');

查看插入的数据
select * from employee;


使用insert语句向表中插入一个员工的信息。
insert into employee(id,name,birthday,entry_date,job,salary,resume) values(2,'小李子','1980-09-09','1980-09-09','bbb',1000,'bbbbbbbb');

插入失败后的解决方案
show variables like 'chara%';
set character_set_client=gb2312;


显示失败后的解决方案
set character_set_results=gb2312;

将所有员工薪水修改为5000元。
update employee set salary=5000;

将姓名为’aaa’的员工薪水修改为3000元。
update employee set salary=3000 where name='aaa';

将姓名为’aaa’的员工薪水修改为4000元,job改为ccc
update employee set salary=4000,job='ccc' where name='aaa';

将aaa的薪水在原有基础上增加1000元。
update employee set salary=salary+1000 where username='aaa';

删除表中名称为’zs’的记录。
delete from employee where username='小李子';

删除表中所有记录。
delete from employee;

使用truncate删除表中记录。
truncate table employee;

查询表中所有学生的信息。
select id,name,chinese,english,math from student;
select * from student;

查询表中所有学生的姓名和对应的英语成绩。
select name,english from student;

过滤表中重复数据。
select distinct english from student;

在所有学生的英语分数上加10分特长分。
select name,english+10 from student;

统计每个学生的总分。
select name,(english+chinese+math) from student;

使用别名表示学生分数。
select name as 姓名,(english+chinese+math) as 总分 from student;
select name 姓名,(english+chinese+math) 总分 from student;

查询姓名为王五的学生成绩
select * from student where name='王五';

查询英语成绩大于90分的同学
select * from student where english>90;

查询总分大于200分的所有同学
select * from student where (english+chinese+math)>200;

查询英语分数在 80-90之间的同学。
select * from student where english>80 and english<90;
select * from student where english between 80 and 90;

查询数学分数为89,90,91的同学。
select * from student where math=80 or math=90 or math=91;
select * from student where math in(80,90,91);

查询所有姓李的学生成绩。
select * from student where name like '李%';

对数学成绩排序后输出。
select name,math from student order by math;

对总分排序后输出,然后再按从高到低的顺序输出
select name from student order by (math+english+chinese) desc;

对姓李的学生成绩排序输出
select name 姓名,(math+english+chinese) 总分 from student where name like '李%' order by (math+english+chinese) desc;

统计一个班级共有多少学生?
select count(*) from student;
select count(name) from student;

统计数学成绩大于90的学生有多少个?
select count(*) from student where math>90;

统计总分大于250的人数有多少?
select count(*) from student where (math+english+chinese)>250;

统计一个班级数学总成绩?
select sum(math) from student;

统计一个班级语文、英语、数学各科的总成绩
select sum(math),sum(chinese),sum(english) from student;

统计一个班级语文、英语、数学的成绩总和
select sum(chinese+math+english) from student;

统计一个班级语文成绩平均分
select sum(chinese)/count(chinese) from student;

求一个班级数学平均分?
select avg(math) from student;

求一个班级总分平均分
select avg(chinese+english+math) from student;

求班级最高分和最低分
select max(chinese+english+math),min(chinese+english+math) from student;

对订单表中商品归类后,显示每一类商品的总价
select product from orders group by product;
select product,sum(price) from orders group by product;

查询购买了几类商品,并且每类总价大于100的商品
select product from orders  group by product having sum(price)>100;


定义带有主键约束的表
create table test1
(
	id int primary key,
	name varchar(20),
	password varchar(20)
);

定义一个主键 自动增长的表
create table test2
(
	id int primary key auto_increment,
	name varchar(20),
	password varchar(20)
);

create table test3
(
	id int primary key auto_increment,
	name varchar(20) unique
);

create table test4
(
	id int primary key auto_increment,
	name varchar(20) unique not null
);

//什么是外键约束

create table husband
(
	id int primary key,
	name varchar(20)
);

create table wife
(
	id int primary key,
	name varchar(20),
	husband_id int,
	constraint husband_id_FK foreign key(husband_id) references husband(id)
);


//一对多或多对一

create table department
(

)

create table employee
(

)


//多对多

create table teacher
(
	id int primary key,
	name varchar(20),
	salary double
);

create table student
(
	id int primary key,
	name varchar(20)	
);


create table teacher_student
(
	teacher_id int,
	student_id int,
	primary key(teacher_id,student_id),
	constraint teacher_id_FK foreign key(teacher_id) references teacher(id),
	constraint student_id_FK foreign key(student_id) references student(id)	
);

//一对一

create table person
(
	id int primary key,
	name varchar(20)
);

create table idcard
(
	id int primary key,
	address varchar(40),
	constraint id_FK foreign key(id) references person(id)
);


	





<think>好的,我需要帮助用户寻找SQL语句练习相关资源。首先,用户提到他们需要练习题、教程资源,并且已经提供了三个引用内容。我需要整理这些信息,同时结合自己的知识来给出全面的回答。 首先,查看用户提供的引用。引用[1]提到有几十道SQL练习题,适合巩固基础,但未涉及性能优化。引用[2][3]分别涉及嵌套查询删除多个的操作,说明这些练习题可能涵盖子查询、集合运算以及多操作等中级内容。用户可能需要从基础到进阶的练习题,以及教程资源。 接下来,我应该分步骤回答。第一步是练习题资源,需要列举不同的来源,包括用户提到的引用,以及补充其他常见资源,如LeetCode、HackerRank、书籍推荐等。第二步是教程资源,可以推荐在线平台、书籍视频教程。第三步是学习方法,强调练习的重要性、理解原理、优化技巧实战项目。 需要确保回答结构清晰,每个部分用标题分隔,使用列项目符号。同时,按照系统指令,行内数学公式用$...$,但这里可能不需要数学公式。独立公式使用$$...$$,但同样可能不适用。需要检查LaTeX语法是否正确,不过用户的问题更多是关于SQL练习,可能用代码块较多。 另外,用户要求生成相关问题,放在最后。可能需要考虑用户可能的后续问题,如推荐特定书籍、如何优化SQL查询、哪里找实战项目等。 需要确保引用正确,每个引用标记在对应的位置。例如,引用[1]提到基础练习题,引用[2]是嵌套查询的例子,引用[3]是多删除的例子。在回答中适当引用这些内容。 可能还需要补充一些常见的资源,如W3Schools、SQLZoo等免费平台,以及《SQL必知必会》这样的书籍。此外,GitHub上的开源项目或练习题集合也是不错的资源。 在编写练习题部分时,可以分类为初级、中级、高级,或者按题目类型分类,如查询、连接、子查询、数据修改等。同时,用户提供的引用中的例子可以作为具体例子列出,比如引用[2]中的嵌套查询集合运算题,引用[3]中的多删除操作。 教程资源部分需要区分免费付费,以及书籍推荐。学习方法部分要强调练习、理解基础、分析执行计划、参与项目等。 最后,相关问题需要考虑用户可能进一步的需求,比如如何优化SQL,学习路径,实战项目资源,以及认证考试推荐。 需要确保回答符合中文要求,结构清晰,分点明确,并且自然引用提供的参考文献。同时,检查是否有任何格式错误,比如代码块是否正确标注,引用标记是否正确放置。</think>### SQL语句练习题与学习资源推荐 --- #### **一、SQL练习题资源** 1. **基础练习题合集** - 引用[1]提供了几十道基础SQL练习题,覆盖查询、筛选、聚合等操作,适合巩固语法基础。例如: ```sql -- 示例:查询所有价格高于平均价格的商品 SELECT product_name, price FROM products WHERE price > (SELECT AVG(price) FROM products); ``` 这类题目可帮助掌握子查询、连接等核心语法[^1]。 2. **嵌套查询与集合运算** - 引用[2]包含嵌套查询集合运算的题目,例如: ```sql -- 示例:查询未选修特定课程的学生(子查询方法) SELECT student_name, student_id FROM students WHERE student_id NOT IN ( SELECT student_id FROM course_selection WHERE course_name IN ('数据库原理', '操作系统') ); ``` 这类题目适合提升复杂逻辑处理能力[^2]。 3. **多操作与数据修改** - 引用[3]提供多关联删除的示例: ```sql -- 示例:删除2018年之前的支付记录及相关车辆信息 DELETE c, p FROM t_car c JOIN t_car_pay p ON c.carid = p.carid WHERE DATE(p.payTime) < '2018-01-01'; ``` 此类练习有助于理解事务性操作[^3]。 4. **进阶资源推荐** - **LeetCode**:提供分难度SQL题库(如“第二高的薪水”“连续出现的数字”)。 - **HackerRank**:包含从基础到高级的交互式练习题。 - **SQLZoo**:免费实战练习平台,支持在线运行SQL语句。 --- #### **二、SQL教程与系统学习资源** 1. **免费在线教程** - **W3Schools SQL教程**:语法详解+在线练习(适合入门)[链接](https://www.w3schools.com/sql/)。 - **Mode Analytics SQL教程**:结合数据分析场景的教学(适合进阶)。 2. **书籍推荐** - 《SQL必知必会》:通俗易懂,适合快速上手。 - 《高性能MySQL》:深入索引优化、查询调优(适合进阶)。 3. **实战项目资源** - **Kaggle数据集**:使用真实数据集(如电商销售数据)编写复杂查询。 - **GitHub开源项目**:搜索“SQL practice”获取带答案的题集。 --- #### **三、学习方法建议** 1. **从基础到复杂** - 先掌握`SELECT`、`JOIN`、`GROUP BY`等核心语法,再逐步挑战嵌套查询窗口函数。 2. **注重优化意识** - 完成基础练习后,学习索引设计、执行计划分析(如`EXPLAIN`语句)。 3. **参与实际项目** - 尝试搭建本地数据库(如MySQL、PostgreSQL),导入数据并完成完整的数据分析任务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值