mysql查询添加数据库表_MySQL_1 关系型数据库的存储结构 数据库的添加,修改,删除,查询操作 数据库表的添加,修改,删除,查询操作 数据库表记录的添加,修改,删除,查询...

理解数据库和关系型数据库的概念

什么是数据库

数据库就是一个文件系统,通过标准的SQL语句获取数据

什么是MySQL数据库

0a7a8ad3d747efde8fe5d1632f06856a.png

什么是关系型数据库

关系型数据库存放的是实体之间的关系

ac264526e34f678eaba5f6681a67b92f.png

常见的关系型数据库

l MySQL

l Oracle

l SQLServer

l DB2

l SyBase

什么是服务器

服务器要从硬件和软件两个方面来说:

l 硬件:指的就是一台计算机。

l 软件:需要在这台电脑上安装数据库服务器。

存储方式的描述

a324e319375c4de334563d60d29366a1.png

一台数据库服务器中会创建很多数据库(一个项目,会创建一个数据库)。在数据库中会创建很多张表(一个实体会创建一个表)。在表中会有很多记录(一个对象的实例会添加一条新的记录)。

什么是SQL

1cb97bc6e187a2f4cbe82c03cac3a94b.png

SQL的分类

DDL:数据定义语言

create,drop,alter..

DCL:数据控制语言

grant,if…

DML:数据操纵语言

insert,update,delete…

DQL:数据查询语言

select

SQL对数据库进行操作

创建数据库

语法:

create database 数据库名称[character set字符集collate字符集校对规则];

5e43a85f11a41334724be8a05ed4c807.png

查看数据库

语法:

查看数据库服务器中所有的数据库:show databases;

d2dea06331fef9c3830892259b6e7455.png

查看某个数据库的定义信息: show create database 数据库名称;

34a5435c1aaa8caedcb449cbfa547409.png

修改数据库

语法:

alter database 数据库名称character set字符集collate校对规则;

da00caaace8c7aa0218bfc79e1b49c2d.png

删除数据库

语法:

drop database 数据库名称;

a7f823f7bf03387cfa20239635059745.png

其他数据库操作

切换数据库:use 数据库名称;

36a2299a9940feabc6ce309e24dc469b.png

l 查看当前正在使用的数据库:

82a90d10ca1869a6ad4e77434d95b436.png

SQL对数据库表进行操作

SQL创建表

l 语法:

n create table 表名称(字段名称 字段类型(长度)约束,字段名称 字段类型(长度)约束…);

l 字段类型

n 一个实体对应一个表,一个实体属性对应表的一个字段。

Java中的类型 MySQL中的类型

byte/short/int/long tinyint/smallint/int/bigint

float float

double double

boolean bit

char/String char和varchar类型

char和varchar的区别:

* char代表是固定长度的字符或字符串。

* 定义类型char(8),向这个字段存入字符串hello,那么数据库使用三个空格将其补全。

* varchar代表的是可变长度的字符串。

* 定义类型varchar(8),向这个字段存入字符串hello,那么存入到数据库的就是hello。

Date date/time/datetime/timestamp

datetime和timestamp区别

* datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中

* timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库中。

File BLOB/TEXT

l 约束

n 约束作用:保证数据的完整性

n 单表约束分类:

u 主键约束:primary key 主键约束默认就是唯一 非空的

u 唯一约束:unique

u 非空约束:not null

建表语句:

create database web_test1;

use web_test1;

create table user(

id int primary key auto_increment,

username varchar(20) unique,

password varchar(20) not null,

age int,

birthday date

);

SQL查看表

查看某个数据库下的所有的表

语法:show tables;

2dc3639c734b260e5622bd4f9cdfb814.png

查看某个表的结构信息

语法:desc 表名;

d3427ed6cc952dec89732eaaf467de65.png

SQL删除表

删除表

语法:drop table 表名;

10c28c451e6b42a22b1d49053da9d9ba.png

SQL修改表

修改表:添加列

alter table 表名add列名 类型(长度)约束;

cd9d42cc07acafe3854cdd0b0b72e2ae.png

修改表:修改列类型,长度和约束

alter table 表名modify列名 类型(长度)约束;

95f8d0f143c91eaff61464c3e66a8cd0.png

修改表:删除列

alter table 表名drop列名;

9ab458822a1df0f291556d5c21e0a6f0.png

修改表:修改列名称

alter table 表名change旧列名 新列名 类型(长度)约束;

f1ea7a71acff1c1c376e829e7549ad02.png

修改表:修改表名

rename table 表名to新的表名;

5c9a5688c4f0a17f57e7a49cfbbc5d9d.png

修改表:修改表的字符集

alter table 表名character set字符集;

9bdae687dcfad2cf409beae7f3b3ef9a.png

SQL对数据库表的记录进行操作(重点)

SQL添加表的记录

语法:

向表中插入某些列:insert into 表名(列名1,列名2,列名3…) values (值1,值2,值3…)

向表中插入所有列:insert into 表名values (值1,值2,值3…);

注意事项

1.值的类型与数据库中表列的类型一致。

2.值的顺序与数据库中表列的顺序一致。

3.值的最大长度不能超过列设置最大长度。

4.值的类型是字符串或者是日期类型,使用单引号引起来。

添加记录

添加某几列

insert into user (id,username,password) values (null,'aaa','123');

0672ba9e7c92c1a9f4e23fe9e81deb0e.png

添加所有列

insert into user values (null,'bbb','123',23,'1993-09-01');

0be4e85fe3470e140bd9606a00aff77d.png

添加中文记录

insert into user values (null,'张三','123',23,'1993-09-01');

c85341310e9ad4db5342f8e588763a3f.png

直接向数据库中插入中文记录会出现错误!!!

解决方法:

show variables like '%character%';--查看数据库中与字符集相关参数:

需要将MySQL数据库服务器中的客户端部分的字符集改为gbk。

找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集

d963c44f7ccc9b7860f7072a89392951.png

* 重新启动MySQL的服务器

services.msc

SQL修改表的记录

语法:

update 表名set列名=值,列名=值[where条件];

注意事项

1.值的类型与列的类型一致。

2.值的最大长度不能超过列设置的最大长度。

3.字符串类型和日期类型添加单引号。

修改某一列的所有值

update user set password = 'abc';

a885ba64ad9fcdc2bc1f744719add3b6.png

按条件修改数据

update user set password = 'xyz' where username = 'bbb';

29c07557a6e2d19ae06f64e06f9bb824.png

l 按条件修改多个列

update user set password='123',age=34 where username='aaa';

8299aab646cee3418d77d0a1fc0f9df0.png

SQL删除表的记录

语法:

delete from 表名[where条件];

注意事项

1.删除表的记录,指的是删除表中的一行记录。

2.删除如果没有条件,默认是删除表中的所有记录。

删除某一条记录

delete from user where id = 2;

fd5c812bf776c1ba79b1b3b1a1d06399.png

删除表中的所有记录

delete from user;

40ca410502cd7b5b50dc2d90677fe26b.png

删除表中的记录有两种做法:

delete from user;

删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的

truncate table user;

删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的

SQL查看表的记录(重点)

基本查询

语法:select [distinct] *|列名from表[条件];

环境的准备:

create table exam(

id int primary key auto_increment,

name varchar(20),

english int,

chinese int,

mathint

);

insert into exam values (null,'张三',85,74,91);

insert into exam values (null,'李四',95,90,83);

insert into exam values (null,'王五',85,84,59);

insert into exam values (null,'赵六',75,79,76);

insert into exam values (null,'田七',69,63,98);

insert into exam values (null,'李老八',89,90,83);

查询所有学生考试成绩信息

select * from exam;

fc817892843f5d68db2e1562860ef7bb.png

查询所有学生的姓名和英语成绩

select name,english from exam;

d0169f83301a2fcd5c59630dec3e8f7c.png

查询英语成绩信息(不显示重复的值)

select distinct english from exam;

d1434b87dddae8e2af690340e6660e71.png

查看学生姓名和学生的总成绩

select name,english+chinese+math from exam;

8b8c8355ffbfd3b17fd33e35769bdafc.png

别名查询

select name,english+chinese+math as sum from exam;

507eeb53742e002e2ec9a9155043aa57.png

条件查询

使用where子句

> , < , >= , <= , <> ,=

like:模糊查询

in:范围查询

条件关联:and , or ,not

查询李四学生的成绩:

select * from exam where name = '李四';

ad0c6d187fe7947d4708a7b01cc806cb.png

查询名称叫李四学生并且英文大于90分

select * from exam where name = '李四' and english > 90;

65bd1058ca0a3eae1121652b99bf5247.png

查询姓李的学生的信息

like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。_只能代表一个字符,而%可以代表任意个字符。

* like ‘李_’:名字中必须是两个字,而且是姓李的。

* like ‘李%’:名字中姓李的学生,李子后可以是1个或任意个字符。

* like ‘%四’:名字中以四结尾的。

* like ‘%王%’:只要名称中包含这个字就可以。

select * from exam where name like '李%';

9a7e04fd1dbbda3f8fb2018efaa62558.png

查询英语成绩是69,75,89学生的信息

select * from exam where english in (69,75,89);

792099d12228da91e6cdcd745ab301bd.png

排序查询

使用order by 字段名称 asc/desc;

查询学生信息,并且按照语文成绩进行排序:

select * from exam order by chinese;

645fd972e5550b47dfca3ed43e37afe0.png

查询学生信息,并且按照语文成绩倒序排序:

select * from exam order by chinese desc;

30b07f7eab34bb47a33a31cf84348c63.png

查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语成绩升序排序

select * from exam order by chinese desc,english asc;

bf58e5a0097b396b9377f9c96072cdf9.png

查询姓李的学生的信息,按照英语成绩降序排序

select * from exam where name like '李%' order by english desc;

31026d32d6f46731e97a56ae3e997d75.png

分组统计查询

聚合函数使用

sum();

获取所有学生的英语成绩的总和:

select sum(english) from exam;

8935d102d8663d8524b3f179a6194370.png

获取所有学生的英语成绩和数学成绩总和:

select sum(english),sum(math) from exam;

a48493ab10af47ca541930b91753f74c.png

查询姓李的学生的英语成绩的总和

select sum(english) from exam where name like '李%';

477b2f02e68b5e9c30a57100b85ded74.png

查询所有学生各科的总成绩:

select sum(english)+sum(chinese)+sum(math) from exam;

d56ca692cccb83df19715deb6cdc9cc4.png

select sum(english+chinese+math) from exam;

与上面的语句有什么不同?

* 上面的语句是按照列的方式统计,英语成绩总和+语文成绩总和+数学成绩总和。

* 下面的语句先计算英语+数学+语文然后再求和。

* 使用ifnull的函数

cf214040ac534aefe3256dda6ee37f9d.png

count();

获得学生的总数

select count(*) from exam;

d0c2e02324bd2c476bee9c1b27be84ac.png

获得姓李的学生的个数

select count(*) from exam where name like '李%';

af89782a439af0b1ab24e7b6a4b946ef.png

max();

获得数学成绩的最高分:

select max(math) from exam;

b191ccb567d6a36d275a6fb29c541144.png

min();

获得语文成绩的最小值

select min(chinese) from exam;

fefad6b72ecf266d28581a92d37cb289.png

avg();

获取语文成绩的平均值

select avg(chinese) from exam;

309185c595397db7c6f99883c0c2b001.png

分组查询

语法:使用group by 字段名称;

环境准备

create table orderitem(

id int primary key auto_increment,

product varchar(20),

price double

);

insert into orderitem values (null,'电视机',2999);

insert into orderitem values (null,'电视机',2999);

insert into orderitem values (null,'洗衣机',1000);

insert into orderitem values (null,'洗衣机',1000);

insert into orderitem values (null,'洗衣机',1000);

insert into orderitem values (null,'冰箱',3999);

insert into orderitem values (null,'冰箱',3999);

insert into orderitem values (null,'空调',1999);

按商品名称统计,每类商品所购买的个数:

select product,count(*) from orderitem group by product;

e2c95d5306948c036c25f6ca4cfda52f.png

按商品名称统计,每类商品所花费的总金额:

select product,sum(price) from orderitem group by product;

f8668167a8b6a1c0b551dd2b7d5a7a32.png

按商品名称统计,统计每类商品花费的总金额在5000元以上的商品

***** where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having

select product,sum(price) from orderitem group by product having sum(price) > 5000;

6b1af3ec4a6b6c7fcd3e60d02e400ef7.png

按商品名称统计,统计每类商品花费的总金额在5000元以上的商品,并且按照总金额升序排序

select product,sum(price) from orderitem group by product having sum(price) > 5000 order by sum(price) asc;

c5b49477efb349860561ba2b001046ff.png

总结

S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值