2-26.1 MySQL基础2

Mysql客户端工具安装

Navicat

Navicat是一套快速、可靠并价格便宜的数据库管理工具

SQLyog

SQLyog实际上对MysQL支持最多的数据库管理工具

PS:DataBase IDEA中集成的插件,直接操作数据库【适合简单的对数据库进行CRUD】

数据库插入、更新和删除(DML)

DML是对**【表中数据进行操作】**,千万别和DDL弄混

DML的关键字**【insert、update、delete】**

插入数据操作【insert】

语法:
    insert into 表名(列名1,列名2.....)values(列值1,列值2....)
注意:
	1.列名和列值【个数、顺序、数据类型必须是相同且一致】
	2.可以将列名看做时java方法中的形参名字,把列值看做时对形参的赋值
	3.值不能操作列所使用数类型范围,允许没有值但是需要使用【null】
	4.字符串和日期赋值【单引号】引起来
	PS: 以后使用jdbc进行数据库链接操作的时候需要注意取出值是null

修改表中数据【update】

语法:
    update 表名 set 列名=新列值,列名=新列值... [where 条件限制]
注意:
	1.如果没有条件限制,是可以不写where子句  ==》 全体
	2.如果需要限制条件修改,可以在where子句后面添加 条件==》【boolean表达式】 ==》单一
	例如: 将小白的年龄修改为19岁
	update t_user set age = 19 where name = '小白';

删除表中数据【delete】

delete from 表名 [where 条件限制]
注意:
	1.如果没有条件限制,是可以不写where子句  ==》 全体
	2.如果需要限制条件删除,可以在where子句后面添加 条件==》【boolean表达式】 ==》单一列

需求:创建一个数据库mydb1字符编码集为utf8,

​ 在这个数据库中创建一个表emp(id,name,gender,birthday,salary,entry_date【入职日期】,resume【描述】)

向表中插入数据【生日和入职如期是date类型】

创建数据库

create database mydb1 character set utf8;
CREATE TABLE `t_user` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(60) CHARACTER SET gbk DEFAULT NULL,
  `age` int(11) DEFAULT NULL 
)CHARSET=utf8;   # 指定表的编码集
PS:因为直接修改了 my.ini 文件所以可以直接创建表不用指定编码集
   如果在创建数据库的时候指定了编码集,那么库中所有表都是使用 数据库的默认编码集
   
   CREATE TABLE emp(
	id INT,
	name VARCHAR(100),
	gender VARCHAR(10),
	birthday DATE,
	salary FLOAT(10,3),
  entry_date DATE,
  resume text
);  

CREATE TABLE emp(
	id INT,
	name VARCHAR(100),
	gender VARCHAR(10),
	birthday DATE,
	salary FLOAT(10,3),
  entry_date DATE,
  resume text
);  

#向表中插入数据  
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(1,'zhangsan','男','1995-1-1',100000,'2000-10-1','张三是个好孩子');
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(2,'lisi','女','1990-2-14',5000,'1992-10-1','李四是个好孩子');
#更新信息
#将所有员工薪水统一调整为100
UPDATE emp SET salary = 100;
#将lisi的薪水调整为1
UPDATE emp SET salary = 1 WHERE name = 'lisi';
#将lisi薪水修改为2,性别修改为男
UPDATE emp SET salary = 2,gender='男' WHERE name = 'lisi';

#lisi离职,删除这条记录
DELETE FROM emp where name = 'lisi';

#慎重!慎重!在慎重!【清空数据,但是表结构还在】
DELETE FROM emp;

#它和delete类似删除表,但是这个删除相当于是drop掉,然后会创建一张同样的新表,数据是无法找回
truncate table emp;



#查询表中数据
SELECT * FROM emp;

数据库查询语言【DQL 重要,非常重要,反正就是重要!!!】

数据库执行DQL语句**【不会对数据进行改变】,而是让数据库发送结果集到客户端【发送这个结果集是一长虚拟表】**

整个查询语句中核心关键字**【select】**

结合select关键字可以的到一些组合语句,这些语句组合可以得到不同查询效果

select 要查询的列的名称 from 要查询的那张表的名字 where 对查询条件的限制 group by 对查询结果进行分组 having 分组的条件进行限制  order by 对查询数据进行排序  limit 限定显示结果集

需要先将product.sql导入到数据库中,使用这个表中中数据进行操作

请添加图片描述

主键ID	商品名称	商品分类编号   零售价格	  供应商     品牌       折扣        成本价格

CREATE TABLE `product` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `productName` varchar(50) DEFAULT NULL,
  `dir_id` bigint(11) DEFAULT NULL,
  `salePrice` double(10,2) DEFAULT NULL,
  `supplier` varchar(50) DEFAULT NULL,
  `brand` varchar(50) DEFAULT NULL,
  `cutoff` double(2,2) DEFAULT NULL,
  `costPrice` double(10,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

简单查询

#DQL语句的使用
/*
简单查询
查询整张表的内容  select * from 表名;
PS: * 代表的所有内容
查询表中某列或多个列   
select  列名  from 表名;
select  列名1,列名2..... from 表名;
PS:多列查询使用【,】分隔
*/
#查询整张表达信息
select * from product;
#查询货品ID、货品名称
select id,productName from product;
#PS:允许使用反引号【`】对列名 和 表名进行使用 区分关键字, 不要使用关键字作为列名或表名
#select `salePrice` from `product`;

#避免重复值【去重】 distinct
#一般使用在 操作列的位置
#查询商品分类编号
select dir_id from product;
#去除重复汉字
select DISTINCT dir_id from product;
#多个列进行去重,只有列数据完全相同,此时才会去重重复
SELECT DISTINCT dir_id,salePrice from product

/*
在SQL语句中使用算数运算符
对整数或小数的数据类型可以使用【+ - * /】这四个运算符进行计算 组成一个算数表达式
对date【日期】类型可以使用【+ -】 进行计算
原则:
1.先算乘除再算加减
2.同级别的运算符顺序是从左向右
3.表达式使用“小括号”,可以强行改变优先级

特别注意: 在SQL语句中 == 并不是判断是否相等
					 比较是否相等 此时需要使用 =
					 如果需要给某一个列修改值 也需要使用 =

*/
#查询所有货品ID,商品名称和 批发价格(批发价格= 零售*折扣)
select id,productName,salePrice * cutoff from product;
#查询所有货品ID,货品名称和个进50个成本价格
select id,productName,costPrice,costPrice*50 from product;
#查询所有货品ID,货品名称和个进50个成本价格,每一个鼠标都要+1运费
select id,productName,costPrice,(costPrice+1)*50 from product;

/*
设置列的别名【主要用于虚拟表的列名使用】
例如现阶段查询结果salePrice * cutoff 批发价格,列的展示名字是salePrice * cutoff
对这个列名字进行精简 sc ,这种情况下就可以使用别名

例如多表联合查询【最少2张表】,启动一个表查询出来列需要另外一个表中使用,直接使用列名,不方便也不好记忆,可以将这个列修改别名,在下一张表中使用
遵守规则:
1.添加别名不会修改原有表列的名字,只会在查询表中展示
2.使用别名的是有,可以使用字符【大小写敏感】,尽量不要使用中文
3.在使用别名的时候,一定要注意语句的执行顺序,才可以正确使用别名

需要使用到关键字在  as
*/
#查询所有货品ID,货品名称和个进50个成本价格,每一个鼠标都要+1运费
select id,productName,costPrice,(costPrice+1)*50 AS totalCP from product;
#MySQL中允许省略as关键,但是这个别名要紧跟 列名的后面
select id,productName,costPrice,(costPrice+1)*50 totalCP from product;

where子句

#1.条件过滤
/*
添加了查询条件的过滤
语法:
     select  列名  from 表名 where 限制查询条件;
		 
PS:限制查询条件 可以看做时 boolean表达

比较运算符
= 【等于和赋值】	>【大于】	 >=【大于等于】  <【小于】  <=【小于等于】  [!= 、<>]【不等于】
*/
#查询货品零售讲个为 119的所有商品信息
select * from product where  salePrice = 119;
#查询货品名称不是‘罗技G9X’的所有商品信息
select * from product where  productName != '罗技M305';
select * from product where  productName <> '罗技M310';
#查询货品名称,零售价格小于等于200的货品
select  productName,salePrice from product where salePrice <= 200;
# where子句的后面可以添加 计算表达是进行判断
select productName,salePrice*cutoff 批发价格 from product  where salePrice*cutoff >350;

语句执行过程【必须要记住】

1.from子句【确定从那张表开始查询】 
	--》2.where子句【从表中筛选出符合条件的数据】
		--》3.select子句【从筛选出来的数据结果集中获取出对应列的数据】

逻辑运算符

/*
逻辑运算符
AND 【并且 所有都为true才为true】	OR 【或者 只要有一个条件为true就为true】 
NOT 【取非 false为true true为false】
*/
#查询货品ID,货品名称,批发价格在300~400之间的货品
select id,productName, salePrice * cutoff 批发价格 from product where salePrice * cutoff >=300 AND salePrice * cutoff <=400;
#查询或ID,商品名称,分类编号不为2的所有商品
#方式1:
select id,productName,dir_id FROM product where dir_id != 2;
#方式2:
select id,productName,dir_id FROM product where NOT dir_id = 2; #等价于java  !(dir_id == 2)
#查询所有商品信息,商品编号为2或为4的商品
select * from product  where dir_id =2 or dir_id = 4;
/*这些运算符存在一个计算优先级【先执行NOT然后在执行AND最后是OR】,如果使用小括号会修改优先级*/

Between…And和In 运算符

#范围查询
/*
主要作用是对数值类型或时间日期做一个范围查询,效果和AND是一样
语法:
   select * from 表名 where 列名 between 最小范围 and 最大范围; 
*/
#查询货品ID,货品名称,零售价格在300~400之间的货品
select id,productName, salePrice  from product where salePrice between 300 and 400;
#between and 还可以和NOT一起使用 相当于是取非值  
#查询货品ID,货品名称,零售价格不在300~400之间的货品
select id,productName, salePrice  from product where NOT salePrice between 300 and 400;

/* in运算符[相当于获取小括号中的某个一个值]  跟OR一样
select * from 表名 where 列名 in(值1,值2....)
*/
#查询所有商品信息,商品编号为2或为4的商品
select * from product  where dir_id in(2,4);
#in运算符可以和NOT一起使用,相当于取非
select * from product  where NOT dir_id in(2,4);#当前商品编号不再2和4

判断为列null和like查询

/*
判断列中值是否为null
格式:
select  * from  表名 where 列名 is null
判断不为null  ---》 is not  null 剩余语法和上面一样
*/

/*
模糊查询
使用like 关键字可以进行查询匹配,查询条件可以是包含文件或数字
通用匹配符号
【%】 通配符,可以表示零个或多个任意字符
【_】 通配符,可以表示一个字符

%XXX条件  代表以什么开头   XXX条件%  代表是以什么结尾
*/
#查询货品id,货品名称,货品名称匹配【罗技M】的所有商品
select id,productName from product where productName like '罗技M%';
#查询货品id,货品名称,货品名称匹配罗技M1并且有两个字符 或者  零售价格 大于等于200
select id,productName,salePrice from product where productName like '罗技M1__' or salePrice >= 200;

case…when语法

/*
case when语句  类似于Java中switch-case
select 列名
case
	 when 条件1  then 结果1
	 when 条件2  then 结果2
	 when 条件3  then 结果3
	 ......
	 else 结果4
end	 
	 
PS: 如果使用case when结构就建议使用 as【别名】 当做类名输出	 
*/
#查询 商品ID,商品名称,零售价格,根据零售价格给与不同等级划分
select id, productName,salePrice,
case
WHEN salePrice >= 1000 THEN 'A'
WHEN salePrice >= 500 AND salePrice<1000 THEN 'B'
WHEN salePrice >= 100 AND salePrice<500 THEN 'C'
else 'D'
END AS '罗技LEVEL'
from product;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值