MySQL练习1

一、创建数据库和表


1.新建产品库mydb6_product

create database mydb6_product;        //创建(create)数据库(database)

use mydb6_product;        //进入数据库

select database();        //查看当前数据库

2.employees表
列1:id,整型,主键

列2:name,字符串,最大长度50,不能为空

列3:age,整型

列4:gender,字符串,最大长度10,不能为空,默认值"unknown"

列5:salary,浮点型。

(1)

create table employees(        //创建(create)表(table)

in int primary key,        //int-整型,primary key-主键

age int,

gender varchar(50) not null default 'unknown',        //varchar-字符串且最大为50,not null-不为0,default 'unknown'-设置默认值为'unknown'

salary float);        //float-浮点型

(2)

desc employees;        //查看表设置属性

3.orders表
列1:id,整型,主键

列2:name,字符串,最大长度100,不能为空”

列3:price,浮点型

列4: quantity,整型

列5:category,字符串,最大长度50。

(1)

create table orders(        //创建表

id int primary key,        //primary key-设置主键

name varchar(100) not null;        //varchar(100)-最大为100的字符串,not null-不为0

price float,

quantity int,

category varchar(50));

(2)

desc orders;        //查看表设置属性

4.invoices表
列1:number,整型,主键自增长

列2:order_id,整型,外键关联到orders表的id列

列3:in_date:日期型

列4:total_amount:浮点型,要求数据大于0

(1)

create table invoices(        //创建表

number int primary key auto_increment,        //primary key-设置主键,auto_increment-设置自增长

order_id int,

in_date date,        //date-日期

total_amount float,

check(total_amount>0),        //设置数据大于0

foreign key(order_id) rederences orders(id));        //foreign key(order_id)-外键,rederences-引用(主键)

二、查询表信息

创建数据库

create database mydb8_worker;

use mydb8_worker;        //进入数据库

select database();        //查看当前数据库

创建表

create table t_worker(

department_id int(11) not null comment '部门号',

//int(11)--长度为11的整型,not null--不为0,comment--注释

worker_id int(11) primary key not null comment '职工号',

//int(11)--长度为11的整型,primary key--设置主键,not null--不为0,comment--注释

worker_date date not null comment '工作时间',

//date--日期型

wages float(8,2) not null comment '工资',

//float(8,2)--长度为8并保留2位的浮点型

politics varchar(20) not null default '' comment '政治面貌',

//varchar(20)--最大长度为20的字符串

name varchar(20) not null comment '姓名',

borth_date date not null comment '出生日期');

插入数据

insert into t_worker values

(101, 1001, '2015-5-4', 7500.00, '群众', '张春燕', '1990-7-1'),

(101, 1002, '2019-2-6', 5200.00, '团员', '李名博', '1997-2-8'),

(102, 1003, '2008-1-4', 10500.00, '党员', '王博涵', '1983-6-8'),

(102, 1004, '2016-10-10', 5500.00, '群众', '赵小军', '1994-9-5'),

(102, 1005, '2014-4-1', 8800.00, '党员', '钱有财', '1992-12-30'),

(103, 1006, '2019-5-5', 5500.00, '党员', '孙菲菲', '1996-9-2');


1.显示所有职工的基本信息。    

select * from t_worker;

//select--查询,*--所有,from--指定表

2.查询所有职工所属部门的部门号,不显示重复的部门号。  

select distinct department_id from t_worker;

//select--查询,distinct--不重复,department_id--被指定字段(列),from--指定表

3.求出所有职工的人数。    

select count(*) as t_num from t_worker;

//count(*)--统计数据,as t_num--起别名为t_num

4.列出最高工和最低工资。

select max(wages),min(wages) from t_worker;

//max(wages)--求wages数据中的最大值,min(wages)--求wages数据中的最小值

    

5.列出职工的平均工资和总工资。  

select avg(wages),sum(wages) from t_worker;

//avg(wages)--求wages数据的平均值,sum(wages)--求wages数据的总和 

6.创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。    

create table w_date select worker_id,worker_date,name from t_worker;

//create table--创建表,select--查询

select * from w_date;

7.显示所有党员的年龄。    

select name,year(curdate())-year(borth_date) as age from t_worker where politics='党员';

//year(curdate())-year(borth_date) as age--现在日期-出生日期并起别名为age,where--筛选,politics='党员'--指定政治面貌为党员

8.列出工资在4000-8000之间的所有职工姓名。  

select worker_id,name from t_worker where wages>=4000 and wages<=8000;

//where--筛选 

9.列出所有孙姓和李姓的职工姓名。    

select worker_id,name from t_worker where name like '孙%' or name like '李%';

//name like '孙%'--指定姓孙的职工

10.列出所有部门号为102和103且不是党员的职工号、姓名。  

select worker_id,name from t_worker 

where (department_id=102 or department_id=103) and politics!='党员';

//(department_id=102 or department_id=103)--指定部门号为102或103,politics!='党员'--指定不是党员 

11.将职工表t_worker中的职工按出生的先后顺序排序。    

select name,borth_date from t_worker order by borth_date;

//order by--排序,在字段后写asc是升序,写desc是降序,默认不写是asc(升序)

12.显示工资最高的前3名职工的职工号和姓名。  

select worker_id,name from t_worker order by wages desc limit 3;

//order by--排序,desc--降序,limit 3显示前3条信息

13.求出各部门党员的人数。    

select department_id,count(*) from t_worker where politics='党员' group by department_id;

//count(*)--统计数据,group by--分组

14.统计各部门的工资和平均工资并保留2位小数。

select department_id,round(sum(wages),2) as w_sum,round(avg(wages),2) as w_avg

from t_worker group by department_id;

round(sum(wages),2)--round(数值,2)对数值保留2为小数,sum(wages)--对wages数据求总和,avg(wages)--对wages数据求平均值,group by--分组

15.列出总人数大于等于3的部门号和总人数。

select department_id,count(*) as d_count from t_worker 

group by department_id having count(*)>=3;

//count(*)--统计数据,group by--分组,having--对分组后的数据进行筛选

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值