MySql基础1

数据库概述

什么是数据库?

所谓的数据库就是指存储和管理数据的仓库

扩展内容1:数据库有哪些分类?(了解)

早期: 层次式数据库、网络型数据库
现在:关系型数据库、非关系型数据库

什么是关系型数据库?

底层以二维表的形式保存数据的库就是关系型数据库

stu-学生表

学生编号姓名年龄
1001刘沛霞35
1002陈子枢18

扩展内容2:常见的关系型数据库有哪些?(了解)

  • Sql Server:微软提供,收费,适用于一些中型或大型的项目中,在java中的使用占比不高(.NET中使用的较多)

  • Oracle:甲骨文公司提供,收费,适用于一些大型或者超大型的项目中,在java中的使用占比非常高

  • mysql:瑞典MySQLAB公司提供,免费开源,适用于一些小型或者中型的项目中,在Java中的使用占比较高(小巧轻量)
    mariadb

  • DB2:IBM公司提供,收费,在一些银行、金融等行业中使用较多。在java中的使用占比也不高。

  • Sqlite:迷你数据库,嵌入式设备中

数据库相关概念

1、什么是数据库服务器

数据库服务器就是一个软件(比如mysql软件)将数据库软件安装在电脑上,当前电脑就是一个数据库服务器。就可以对外提供存取数据的服务

在一个数据库服务器中可以创建多个数据库(dataBases),每一个数据库都是一个单独的仓库。

2、什么是数据库

数据库就是存储和管理数据的仓库,通常情况下,一个网站的中的所有数据会存放在一个数据库中。例如:

jd.com 			db_jd(数据库)
taobao.com 		db_taobao(数据库)
...

3、什么是表

一个数据库中可以创建多张表,每张表用于存储一类信息(数据库),例如:

jd.com中的用户数据 tb_user(表)

jd.com中的商品数据 tb_product(表)

jd.com中的订单数据 tb_order(表)

4、什么表记录

一张表中可以包含多行表记录,每一行表记录用于存储某一个具体的数据

学生编号姓名年龄
1001刘沛霞35
1002陈子枢18
。。。。。。。。。

什么是SQL语言?

SQL是一们用于操作关系型数据库的通用的语言(使用SQL可以操作所有的关系型数据库)

使用SQL可以操作数据库、表、表记录

(1)创建数据库、删除数据库、修改数据库、查询数据库

(2)创建表、删除表、修改表、查询表

(3)新增表记录、删除表记录、修改表记录、查询表记录

使用SQL也可以操作存储过程/视图/索引等。

提示:SQL是一个标准通用的操作关系型数据库的语言(普通话),每个数据库厂商为了增强自己数据库的功能,都提供了支持自己数据库的语言,称之为数据库的方言。方言不通用!

连接mysql服务器

通过命令行工具可以登录MySQL客户端,连接MySQL服务器,从而访问服务器中的数据。

1、连接mysql服务器:

mysql -uroot -proot

**-u:**后面的root是用户名,这里使用的是超级管理员root;

**-p:(小写的p)**后面的root是密码,这是在安装MySQL时就已经指定的密码;

2、连接mysql服务器并指定IP和端口:

mysql -uroot -proot -h127.0.0.1 -P3306

**-h:**后面给出的127.0.0.1是服务器主机名或ip地址,可以省略的,默认连接本机;

**-P:(大写的P)**后面的3306是连接端口,可以省略,默认连接3306端口;

3、退出客户端命令:quit或exit或 \q

4、FAQ:常见问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yPCDtTE9-1584352306401)(JAVAWEB-NOTE01.assets/e23a06d3921d5d68c48d6e51024aae8a.jpg)]

解决方法:复制mysql安装目录下的bin目录,将bin目录的路径添加到path环境变量中!!

扩展内容3:

(1)在cmd中连接mysql服务器之后,可以使用 #、/**/、-- 等符号添加注释,例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYFXNCAg-1584352306403)(JAVAWEB-NOTE01.assets/7765164a8afaa8d26d9b31ff3356bc33.png)]

(2)在cmd中连接mysql服务器之后,在书写SQL语句时,可以通过 \c 取消当前语句的执行。例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-drGFYYRG-1584352306404)(JAVAWEB-NOTE01.assets/4c6edbd263d6c870ac745e34d4b207d0.png)]

数据库及表操作

创建、删除、查看数据库

提示: (1)SQL语句对大小写不敏感。推荐关键字使用大写,自定义的名称(库名,表名,列名等)使用小写。

SHOW DATABASES;
CREATE DATABASE mydb1;

(2)并且在自定义名称时,针对多个单词不要使用驼峰命名,而是使用下划线连接。(例如:tab_name,而不是 tabName )

– 01.查看mysql服务器中所有数据库

show databases;

– 02.进入某一数据库(进入数据库后,才能操作库中的表和表记录)

– 语法:USE 库名;

use table;

– 查看已进入的库

SELECT DATABASE();

– 03.查看当前数据库中的所有表

show tables;

– 04.删除mydb1库

– 语法:DROP DATABASE 库名;

drop database data;

-- 思考:当删除的库不存在时,如何避免错误产生?

drop database if exists data;

– 05.重新创建mydb1库,指定编码为utf8

– 语法:CREATE DATABASE 库名 CHARSET 编码;

create database data charset utf8;

– 如果不存在则创建mydb1;

create database if not exists mydb1 charset utf8;

– 06.查看建库时的语句(并验证数据库库使用的编码)

– 语法:SHOW CREATE DATABASE 库名;

show create database mydb1;
show create table 表名;

创建、删除、查看表

– 07.进入mydb1库,删除stu学生表(如果存在)

– 语法:DROP TABLE 表名;

drop table if exists stu;

– 08.创建stu学生表(编号[数值类型]、姓名、性别、出生年月、考试成绩[浮点型]),建表的语法:

CREATE TABLE 表名(
	列名 数据类型,
	列名 数据类型,
	...
);

SQL语句:

create table stu(
	id int,
	name varchar(50),
	gender varchar(10),
	brithday date,
	score double
);

– 09.查看stu学生表结构

– 语法:desc 表名

desc stu;

新增、更新、删除表记录

– 10.往学生表(stu)中插入记录(数据)

– 语法:INSERT INTO 表名(列名1,列名2,列名3…) VALUES(值1,值2,值3…);


提示:

(1)当为所有列插入值时,可以省写列名,但值的个数和顺序必须和声明时列的个数和顺序保持一致!
(2)SQL语句中的值为字符串或日期时,值的两边要加上单引号(有的版本的数据库双引号也可以,但推荐使用单引号)。
(3)(针对cmd窗口)在插入数据之前,先设置编码:set names gbk;

或者用一下命令连接mysql服务器:

mysql --default-character-set=gbk -uroot -proot

– 11.查询stu表所有学生的信息

– 语法:SELECT 列名 | * FROM 表名


– 12.修改stu表中所有学生的成绩,加10分特长分

– 修改语法: UPDATE 表名 SET 列=值,列=值,列=值…[WHERE子句];

update stu set score=score+10;

– 13.修改stu表中编号为1的学生成绩,将成绩改为83分。

update stu set score=83 where id=1;

提示:where子句用于对记录进行筛选过滤,保留符合条件的记录,将不符合条件的记录剔除。

– 14.删除stu表中所有的记录

– 删除记录语法: DELETE FROM 表名 [where条件]

delete from stu

– 仅删除符合条件的


查询表记录

– 准备数据: 以下练习将使用db10库中的表及表记录,请先进入db10数据库!!!

基础查询

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。

语法:SELECT 列名称 | * FROM 表名

提示:(1) *(星号)为通配符,表示查询所有列。

(2)但使用 *(星号)有时会把不必要的列也查出来了,并且效率不如直接指定列名

– 15.查询emp表中的所有员工,显示姓名,薪资,奖金


– 16.查询emp表中的所有部门和职位

select dept,job from emp;

思考:如果查询的结果中,存在大量重复的记录,如何剔除重复记录,只保留一条? */

– 在select之后、列名之前,使用DISTINCT 剔除重复的记录

select distinct dept,job from emp;

WHERE子句查询

WHERE子句查询语法:SELECT 列名称|* FROM 表名称 WHERE 列 运算符 值

下面的运算符可在 WHERE 子句中使用:

在这里插入图片描述
– 17.查询emp表中薪资大于3000的所有员工,显示员工姓名、薪资

select name,sal from emp where sal>3000;

– 18.查询emp表中总薪资(薪资+奖金)大于3500的所有员工,显示员工姓名、总薪资

select name,sal+ifnull(bonus,0) from emp where sal+ifnull(bonus,0)>3500;

– ifnull(列, 值)函数: 判断指定的列是否包含null值,如果有null值,用第二个值替换null值

ifnull(bonus,0);

– 注意查看上面查询结果中的表头,如何将表头中的 sal+bonus 修改为 “总薪资”

– 使用as可以为表头指定别名

select name,sal+ifnull(bonus,0) as 总薪资 from emp where sal+ifnull(bonus,0)>3500;

– 另外as可以省略

select name,sal+ifnull(bonus,0) salall from emp where sal+ifnull(bonus,0)>3500;

– 19.查询emp表中薪资在3000和4500之间的员工,显示员工姓名和薪资

select name,sal+ifnull(bonus,0) salall from emp where sal+ifnull(bonus,0) between 3000 and 4500;

– 提示: between…and… 在…之间

select name,sal+ifnull(bonus,0) salall from emp where sal+ifnull(bonus,0) between 3000 and 4500;

– 20.查询emp表中薪资为 1400、1600、1800的员工,显示员工姓名和薪资

select name,sal from emp where sal = 1400 or sal=1600 or sal=1800;

– 或者

select name,sal from emp where sal in(1400,1600,1800);

– 21.查询薪资不为1400、1600、1800的员工

方式一:

select name,sal from emp where sal not in(1400,1600,1800);

方式二:


方式三:


– 22.查询emp表中薪资大于4000和薪资小于2000的员工,显示员工姓名、薪资。

select name,sal from emp where sal>4000 or sal<2000;

– 23.查询emp表中薪资大于3000并且奖金小于600的员工,显示员工姓名、薪资、奖金。

select name,sal,ifnull(bonus,0) from emp where sal>3000 and ifnull(bonus,0) < 600;

– 处理null值


– 24.查询没有部门的员工(即部门列为null值)

select name from emp where dept is null;

– 思考:如何查询有部门的员工(即部门列不为null值)

select name from emp where dept is not null;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值