mysql数据库学习笔记 (汇总)

mysql数据库学习整理

登录数据库

mysql -u用户名 -p密码
查看数据库 注意以分号结尾
show databases;
#显示所有数据库,(#是mysql注释的符号)


_____________________________________________________________________________________

SQL概述

SQL(Structural query language) 结构化查询语言,用于操作数据库
SQL学习的三条主线

#SQL的学习分为如下的三部分:
#DML :数据操纵语言  ---> INSERT / DELETE / UPDATE / SELECT  ----增删改查
#DDL :数据定义语言  ---> CRAETE(加一个列) / ALTER (修改)/ DROP(删除) / TRUNCATE (清空)/ RENAME(重命名)
#DCL :数据控制语言  ---> COMMIT 提交数据) / ROLLBACK(回滚操作) / GRANT / REVOKE
#说到数据库,习惯上提到增删改查,数据库的增删改比较简单,查询比较难一些
#数据量大可以用limit分页显示,比如:查询五百条数据,十条十条显示

_____________________________________________________________________________________

查询

基本的SELECT语句;

elect 查询的列  from 查询的表`
show databases;
use test1
#有些字段为 null  和java的null是一个意思就是没有赋值的意思,NULL和0是两个概念
select  name myname , age as myage
from myname

#为查询后表的字段指定别名 可用 字段名 别名 的形式
#或者  字段名  as 别名 的形式

#注意所有"," 全都是半角的
#如果列的别名中想要包含空格 则用"别 名"或’别 名’引起来
#规范里要求用双引号,mysql里不严格 oracle数据库里必须是双引号

SELECT hid H_ID,gname AS "GAME NAME"
FROM girl;    

#查询所有的数据库
SHOW DATABASES;
#使用指定的数据库
USE test1;

#基本的查询操作,查哪个列,哪些列

SELECT hid,gname #要查询字段
FROM girl;             #要查询的表

查询的快捷键是F9
查询此表中的全部的列
SELECT *
FROM girl;

#列的别名
#可以使用一对""包裹别名

SELECT hid 'H ID',gname AS "游戏  昵称"
FROM girl;     

#三类常见的数据类型:

#1数值型,java的整型浮点型
#2字符型/字符串型,姓名,街道,省份 没有严格要求说字符就是一个,字符串就是多个
#3日期型
#除此以外还有很多
#日期型和字符型变量。要使用一对 单引号来引用,只能在单引号中出现
#双引号是给列起别名是使用

#显示表结构
#对应改变表
#显示字段名 数据类型 是否为空 key default extra字段属性
#图形化界面相当于选中表以后,右键,改变表

DESC girl;

#命令行显示表结构
#或者使用命令全称
DESCRIBE girl;

比较运算

操作符       含义
=           等于(不是==)
>           大于
>=          大于、等于
<           小于
<=          小于、等于
<>          不等于(也可以是!=)

重点 : 赋值使用 :=符号

#其他比较运算符

操作符                 含义
BETWEEN           在两个值之间(包含边界)
... AND ... 

IN(set)                等于值列表中的一个
LIKE                   模糊查询
IS NULL              空值

在sqlyog中将光标定位在某个查询语句上,就可以执行当前的查询
sql 中的字符理解成字符串

逻辑运算
操作符        含义
AND           逻辑并 (且)
OR            逻辑或 (或)
NOT           逻辑否 (非)

#mysql 刚安装完初始化的数据库有4个
#比较关键的是mysql 这里放的是系统相关的表
#用户名,密码都在这里,密码是加密过的


_____________________________________________________________________________________

过滤和排序数据

#1 过滤 2 排序
#查询 test1 数据库中表 goods 中所有cat_id 是8的信息,并返回

SELECT *
FROM goods
#过滤数据
WHERE cat_id=8;
#查询shop_price > 60的货物
SELECT goods_name,cat_id,shop_price
FROM goods
#WHERE (shop_price > 3000 or shop_price < 2000) ;
WHERE shop_price != 1000;

#between …and … (在两个值之间,包含边界)

SELECT  *
FROM    goods
#where   shop_price between 2000 and 3000;
WHERE   shop_price BETWEEN 3000 AND 2000;
#包含边界时用between and 比较方便,不包含时还是使用 >=之类的操作符比较简单

#in (set ) :取值为()中的任一个

SELECT *
FROM  goods
#where shop_price=2000 or shop_price=2500 or shop_price=3000;
WHERE  shop_price IN( 2000,2500,3000 );

#like :模糊查询 查询goods表 goods_name 包含a的数据

SELECT *
FROM goods
#where goods_name like '%p%e%' or goods_name LIKE '%e%p%'; 

#此处谁like 要写全 写具体
#%号代表0个或多个字符
#oracle 在单引号引的里边是区分大小写的
#WHERE goods_name LIKE ‘%p%’ and goods_name LIKE ‘%e%’;
#查询goods_name 第二个字符是a的数据
WHERE goods_name LIKE ‘_d%’; #mysql 中 _是占位符,一个下划线代表一个字符’___d%'第四个字符是d
#什么字符都可以,任意一个字符
#查询第二个字符是
,且第三个字符是a的数据

#转义字符 \

SELECT *
FROM  girl
#where gname like '%\_%女';

WHERE gname LIKE '%_%女' ESCAPE '_';
#ESCAPE '_' 是指定转义字符的意思,所以转义有两种方法

#is null :空值
#is not null :非空值

SELECT *
FROM girl
WHERE gname IS NOT NULL;

SELECT goods_name, goods_id,market_price,goods_number , (market_price * goods_number) AS '可得销售总额'
#指定一个新列,字段为总额,内容是乘积
#凡是null值参与运算,结果都是null,应该明白,null就是null 不等同于0,如果想把null 当成0 可以用函数来实现
FROM goods;

#排序 分组 order by

SELECT *
FROM goods
#Order By market_price;
#Order by 默认按升序排序
#也可以自己指定排序方式
#ASC  : 升序 (ascend) 也可以省略不写
#Desc : 降序 (descend)
ORDER BY market_price DESC;
#如果想在排序的同时做一些过滤操作,那么 where 不能乱放,不能放在order by 的后边
#where通常和from 挨着,
#from后边紧跟着where,order by 写的时候通常写在查询语句的最后
#查询 goods_number >10 的 market_price 降序之后的数据
SELECT *
FROM goods
WHERE goods_number>10
ORDER BY market_price DESC;

#二级排序

SELECT *
FROM goods
WHERE goods_number>10
ORDER BY market_price DESC,click_count;
#如果一级排序结果比较多,那么就可以指定二级,三级,n级排序
#就在原先的排序条件后加 ,条件即可

#可以使用别名排序

SELECT goods_name AS GOODSNAME #指定别名
FROM goods
WHERE goods_number>10
ORDER BY  GOODSNAME;           #按别名排序


_____________________________________________________________________________________

多表查询

#实现多个表之间的查询
#涉及到多个表连接
#多表连接,多表查询
#为什么不把所有信息都放一张表里,乱,杂,管理起来不方便,如同java中类

#create database 学生信息;
USE 学生信息;
SELECT 姓名,对应地址
FROM  基本信息,区域表;#30行 6*5=30

#以上查询是错误的,称这种错误为:笛卡尔集错误。
#没有写两个表的连接条件,或写条件了,但失效了
#如果多表连接中,没有声明多表连接条件或连接条件失效。
#直角坐标系,又叫笛卡尔坐标系

SELECT 30/6
FROM DUAL;
#dual是虚拟表

#正确的,多表连接,一定会有连接条件

USE 学生信息;
SELECT 姓名,对应地址
FROM  基本信息,区域表
#连接条件
WHERE 基本信息.`区域编号`= 区域表.`区域编号`;
#关联的语法是  表1.字段名=表2.字段名,如果两个字段名相同,则关联成功
#满足连接条件的显示出来了,

#错误示范

USE 学生信息;
SELECT 姓名,对应地址,区域编号#此时这个区域编号是基本信息表里的呢,还是区域表里的呢
#产生了二义性,所以报错ambiguous,此时的解决办法是指定具体的表
#用表.区域编号来表示
#select 后边的两个字段 姓名和对应地址都唯一的存在对应的两个表中,很好查找
#如果查询的列在多个表中都出现
#则一定要指明此列所属的表
#最好是查询时每一列都指明表,
#从SQL优化的角度说,指定所属表的字段效率比较高
#mysql高级课中有优化等其他操作
FROM  基本信息,区域表
WHERE 基本信息.`区域编号`= 区域表.`区域编号`;
#ambiguous  不确定的模糊的

#表的别名

USE 学生信息;
SELECT e.姓名    , d.对应地址
FROM  基本信息 AS e ,区域表 d
#连接条件
WHERE e.`区域编号`= d.`区域编号`;
#如果指定别名则用别名操作,不能用原有名称操作,指定别名也可用AS
#列的别名只能使用在 order by,其他地方不好使
#所以说列的别名只能用来排序,不能用来过滤

#查询具体地址操作三个表

SELECT e.姓名    , d.`区域编号` ,f.具体地址

FROM 基本信息 AS e  , 区域表 AS d , 地址表 AS f

WHERE e.`区域编号`=d.`区域编号`
AND  d.`地址编号`=f.`地址编号`;
#三个表写两个连接条件
#等值连接,两个表必须有共同字段

#总结1:如果有N个表做查询操作,那么连接条件至少有N-1个
#总结2:表的连接分类

#等值连接                   VS   非等值连接
#自连接(自己连接自己)      VS   非自连接(自己连接别人)
#内连接                     VS   外连接

#非等值连接基本信息

SELECT 基本信息.`姓名`,基本信息.`年龄`,工资等级.`等级`
FROM 基本信息,工资等级
#where  基本信
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值