MySQL笔记

数据库(Database)

数据库专门用来存储数据的仓库,本质就是一个文件系统,按照一定的格式将数据存储起来

 方便用户对数据进行增删改查操作(CRUD    create retrieve update delete )

数据库管理系统(DBMS:DataBase Management System)

a. 专门用来建立,使用,管理,维护数据库的大型软件

用户就是通过DBMS来操作数据库

b. 常见DBMS

    MySQL:开源免费的数据库,目前已经被Oracle收购,MySQL6.x开始收费

    Oracle:收费大型数据库,Oracle(甲骨文)公司的产品

    SQLServer:微软公司收费的中型数据库,结合C#编程语言使用

    SQLite:嵌入式的小型数据库,Android开发使用的数据库

    DB2:IBM公司数据库管理系统,收费,主要用在银行

Java常用的数据库:MySQL,Oracle(甲骨文)

Mysql的客户端

      a.命令行的客户端

        1.完整写法:mysql -u root -p123456 -h 127.0.0.1 -P 3306

        -u:用户名 安装时内置的就是root

        -p:安装时设置的密码

        -h:连接哪台机器上mysql 127.0.0.1代表本机上的mysql,也可以为localhost

        -P:3306 代表连接3306端口号对应的mysql服务端

        2.简写: mysql -u root -p123456

          默认连接的是本机上的3306端口的Mysql服务端

      b.图形化界面的客户端

        1.日常开发使用的是navicat

        2.mysql在安装好的时候默认不允许进行远程连接

          a.连接mysql进行授权:grant all on  *.* to root@'%' identified by '123456' with grant option;

                          flush privileges;

          b.重新启动mysql服务,才能生效

SQL语句

专门用来操作数据的结构化查询语言(Structured Query Language)

SQL分类

1.数据定义语言(DDL:data definition language),用来定义数据库,表定义,表中列定义等操作(create,alter,drop……)

       a.DDL语句操纵表

              -- 创建一张表

                     CREATE TABLE 表名{

                            列名1 类型 [约束]  #约束可写可不写

                            列名2 类型 [约束]

}

              -- 修改表结构

                      在表中添加一列: ALTER TABLE 表名 ADD 列名 类型 [约束];

                      修改列的类型: ALTER TABLE 表名 MODIFY 列名 新的类型 [新的约束];

                      修改列的名字: ALTER TABLE 表名 CHANGE 旧列名 新列名 类型 [约束];

                      删除指定的列: ALTER TABLE 表名 DROP 列名;

                      修改表名: RENAME TABLE 旧表名 TO 新表名;

                      删除表:DROP TABLE 表名

2.数据操作语言(DML:Data Manipulation Language):用来对表中的记录进行更新,插入操作,删除数据操作,更新数据操作等(insert,delete,update) 字段名=列名

       a.向表中插入数据

              -- INSERT INTO 表名(字段名1,字段名2,.....) VALUES ('值1','值2',......)

                     值和字段是一一对应的

              -- INSERT INTO 表名 VALUES ('值1','值2',......)

                     由于没有指定字段,所以插入的值默认从第一列开始

-- INSERT INTO 表名[(字段名1,字段名2,.....)] VALUES ('值1','值2',......),('值1','值2',......),..... 批量插入,一次性插入多行数据

-- 解决表中不能插入中文的问题

       1.先查看表的定义信息:包含表使用的字符集,将表的字符集修改为UTF-8即可,其他码表不识别中文,所以不能插入中文

修改表的字符集为UTF-8:

ALTER TABLE student CONVERT TO CHARACTER SET utf8;

       b.更新表中的数据

              UPDATE 表名 SET 字段名1=值1,字段名2=值2,..... [WHERE 条件]

       c.删除表中的数据

              DELECT FROM 表名 [WHERE条件]

3. 数据控制语言(DCL):Data Contorl Language,用来定义数据库访问权限和安全级别等操作

4. 数据查询语言(DQL):Data Query Language,用来查询数据库中的表记录

        关键字:select from where 等     

/*

 查询语法:

SELECT [DISTINCT] * | 列名 1,列名 2,....

FROM 表名

 [WHERE 条件]

*/

# 1.不带 where 条件查询

#查询所有的商品.

SELECT * FROM product; -- 查询 product 表中所有列

#查询商品名和商品价格.

SELECT pname,price FROM product;

#别名查询.使用的关键字是 as(as 可以省略的).表别名:

SELECT p.price FROM product AS p;

SELECT p.price FROM product p;

#别名查询.使用的关键字是 as(as 可以省略的).列别名:

SELECT pname AS '商品名称' FROM product; -- 可以改变查询结果的列名

SELECT pname '商品名称' FROM product;

#去掉价格重复值.

SELECT DISTINCT price FROM product;

#-------------------------------------------------------------------------------

#2.带 where 条件查询

#查询商品名称为'JEEP 男士衬衫'的商品所有信息:

SELECT * FROM product WHERE pname='JEEP 男士衬衫';

#查询价格为 5999 的商品

SELECT * FROM product WHERE price='5999';

SELECT * FROM product WHERE price= 5999;

#查询价格不等于 5999 的商品

SELECT * FROM product WHERE price != 5999;

SELECT * FROM product WHERE price <> 5999; -- <> 表示不等于

#查询价格在[1000,3000]之间的商品

SELECT * FROM product WHERE price>=1000 AND price<=3000;

SELECT * FROM product WHERE price BETWEEN 1000 AND 3000; -- BETWEEN 值 1 AND 值 2 表示[值 1,

值 2]

#查询商品价格是 5999 或 340 的所有商品

SELECT * FROM product WHERE price=5999 OR price=340;

SELECT * FROM product WHERE price in (5999,340); -- in (值 1,值 2,值 3,....) 满足其中一个值就作为结果

显示

#3.模糊查询

# 模糊匹配关键字 LIKE

/*

 %:匹配任意多个字符

_:匹配单个任意字符

*/

#查询商品名中含有'男士'的所有商品

SELECT * FROM product WHERE pname LIKE '%男士%';

#查询以'花花公子'开头的所有商品

SELECT * FROM product WHERE pname LIKE '花花公子%';

#查询第二个字为'想'的所有商品

SELECT * FROM product WHERE pname LIKE '_想%';

#4.带有 NULL 查询

#查询商品表中没有分类的商品

SELECT * FROM product WHERE category_name IS NULL;

#查询有分类的商品

SELECT * FROM product WHERE category_name IS NOT NULL;

#5.排序查询

/*

SELECT [DISTINCT] * | 列名 1,列名 2,....

FROM 表名

 [WHERE 条件]

 [ORDER BY 排序字段 1,排序字段 2,.... ASC|DESC]

默认是 ASC

*/

#查询商品价格升序结果

SELECT * FROM product ORDER BY price ASC;

SELECT * FROM product ORDER BY price;

#查询商品价格降序结果

SELECT * FROM product ORDER BY price DESC;

#查询商品的价格(去除重复价格),并降序排序

SELECT DISTINCT

price

FROM

product

ORDER BY

price DESC;

#6.聚合查询

/*

 常用的聚合函数:

 count 函数:统计表中所有行数

 如果 count 统计某一列值的总数,不包含 NULL 值

sum 函数:计算指定列所有值的和

max 函数与 min 函数:可以获取指定列的最大值和最小值

avg 函数:可以获取指定列的平均值

*/

#查询商品的总条数

SELECT COUNT(*) '商品总数' FROM product;

#查询商品的总分类数(不计算 null 值,但是计算重复值)

SELECT COUNT(category_name) '商品分类总数' FROM product;

SELECT COUNT(p.category_name) FROM

 (SELECT DISTINCT category_name FROM product) p -- 去除种类中的 NULL值,并且去除重复,最后再做

统计

#查询价格大于 1000 商品的总条数

SELECT COUNT(*) FROM product WHERE price>1000;

#计算所有商品的总价

SELECT SUM(price) '商品总价' FROM product;

#查询分类名称为男装所有商品的平均价格

SELECT AVG(price) FROM product WHERE category_name = '男装';

#查询商品的最大价格和最小价格

SELECT MAX(price) FROM product;

SELECT MIN(price) FROM product;

#7.分组查询

/*

 SELECT [DISTINCT] * | 列名 1,列名 2,....

FROM 表名

 [WHERE 条件]

[GROUP BY 列名 1,列名 2,...]

[HAVING 条件]

 [ORDER BY 排序字段 1,排序字段 2,.... ASC|DESC]

默认是 ASC

*/

#统计每个商品种类对应的商品总数

/*

 1.通过 WHERE 进行条件过滤

 2.通过 GROUP BY 对相同的种类进行分组

3.最后针对每组进行 COUNT(*) 聚合

*/

SELECT category_name,COUNT(*) FROM product

WHERE category_name IS NOT NULL

GROUP BY category_name;

/*

 1.通过 GROUP BY 对相同的种类进行分组

 2.对分组后的结果通过 HAVING 条件过滤

3.对过滤后的每组进行 COUNT(*)聚合

*/

SELECT category_name,COUNT(*) FROM product

GROUP BY category_name

HAVING category_name IS NOT NULL;

#统计每个商品种类对应的商品总数,并且商品总数>=3

SELECT category_name,COUNT(*) FROM product

GROUP BY category_name

HAVING category_name IS NOT NULL AND COUNT(*)>=3;

多表查询

        |  的意思是或

  1. 交叉查询(笛卡尔积):SELECT *|字段1,字段2,... FROM 表名1,表名2,....
  2. 内连接查询:① SELECT *|字段1,字段2,.... FROM 表名1,表名2,... WHERE 条件

      ②ELECT  *|字段1,字段2,.... FROM A INNER JOIN B ON 条件 [WHERE 条件]

  1. 外连接查询:①左外连接:SELECT * | 字段1,字段2,... FROM A LEFT OUTER JOIN B ON

条件 [WHERE 条件]   

②右外连接: SELECT * | 字段1,字段2,... FROM A LEFT OUTER JOIN B ON 条件 [WHERE 条件]

  1. 嵌套查询:SELECT pname FROM product WHERE pid IN

(SELECT uid FROM `user` WHERE username='zhangsan');

Mysql常用数据类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值