数据库SQL基础

mysql入门
一、 数据库的介绍
1.什么是数据库
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
2数据库管理系统
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。
在这里插入图片描述
二、 mysql的数据库的安装

卸载的步骤:

  1. 找到mysql的安装目录

  2. 在这里插入图片描述

  3. 找到安装目录中的my.ini文件 复制里面的一个路径: mysql保存数据的目录
    在这里插入图片描述

  4. 控制面板写在mysql

  5. 找到要删除的文件(隐藏文件) 删除MYSQL的目录

启动和停止mysql服务器

Doc窗口:
net start mysql 启动
met stop mysql 停止

登录数据库
mysql -uroot -p密码
mysql --host=127.0.0.1 --user=root --password=密码
三、 SQL语句的介绍
简介:
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
分类

  1. 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
  2. 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
  3. 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。(用的话就查)
  4. 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

我们需要掌握的有两种最常用的:
DML 数据操作语言.表数据的 添加 修改 删除
DQL 表中的数据进行查询 select

SQL语句的基本语法:

  1. SQL语句可以单行或多行书写,以分号结尾
  2. 可使用空格和缩进来增强语句的可读性
  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
    o 例如:SELECT * FROM user。
  4. 同样可以使用//的方式完成注释
    单行注释: #被注释的内容 – 备注是的内容
    多行注释: /
    /
  5. MySQL中的我们常使用的数据类型如下
    #查看所有的数据库
    – 查看所有的数据库
    /*
    查看所有的数据
    /
    SHOW DATABASES;
    DDL数据的操作
    1.数据库的DDL操作
    创建数据库
    – 创建数据库
    /
    *
    第一种:
    create database 数据库的名称;

第二种:
create databse 数据库的名称 character set 字符集

第三种:右键创建
*/

CREATE DATABASE day01_web;

CREATE DATABASE day01_web2 CHARACTER SET ‘UTF8’;

– 查看所有的数据库
SHOW DATABASES;

– 查看如何定义数据
SHOW CREATE DATABASE day01_web;

– 删除数据库
DROP DATABASE day01_web3;
DROP DATABASE day01_web2;

– 查看选中的数据库
SELECT DATABASE();

– 切换数据库
– use 数据库的名称
USE day01_web;

2.DDL数据库表操作
表的操作
– 创建表
/*
格式:
create table 表名称(
字段名 字段类型及长度 [约束],
字段名2 字段类型及长度 [约束],
字段名2 字段类型及长度 [约束]
);

*/
CREATE TABLE person(
NAME VARCHAR(20) ,
age INT
);

– 查看数据库中的所有表:
SHOW TABLES;

– 查看表结构:
DESC person;

– 格式:drop table 表名
DROP TABLE person;

表结构的操作(了解)
– alter table 表名 add 列名 类型(长度) [约束];
– 给表上添加一个 sex列

ALTER TABLE person ADD sex VARCHAR(5) ;

– alter table 表名 modify 列名 类型(长度) 约束;
– 作用:修改表修改列的类型长度及约束.
ALTER TABLE person MODIFY sex VARCHAR(10);

– alter table 表名 change 旧列名 新列名 类型(长度) 约束;
– 作用:sex列修改为gender列
ALTER TABLE person CHANGE sex gender VARCHAR(10);

– alter table 表名 drop 列名;
– 作用:删除gender列
ALTER TABLE person DROP gender;

– rename table 表名 to 新表名;
– 作用:把person改成student表
RENAME TABLE person TO student;

– alter table 表名 character set 字符集(了解);
– 作用:修改表的字符集
ALTER TABLE student CHARACTER SET ‘utf8’;

3.DML数据操作语言
增加语句
– 给表中插入数据
/*
给student表中插入一些数据
格式: 插入指定字段的数据
insert into 表名 (字段1,字段2…) values (值1, 值2);
*/
INSERT INTO student (NAME,age) VALUES(‘貂蝉’,20);
INSERT INTO student (NAME,age) VALUES(‘柳岩’,25);
INSERT INTO student (NAME,age) VALUES(‘林志玲’,45);
SELECT * FROM student; – 查询表中的所有数据

/*
格式2: 插入全部的数据
insert into 表名 values (值1, 值2);
*/
INSERT INTO student VALUES(‘刘德华’,60);
INSERT INTO student VALUES(‘马德华’,55);
INSERT INTO student VALUES(‘马锦涛’,75);

/*
格式3:插入多条数据
insert into 表名 values (值1, 值2), (值1, 值2),(值1, 值2);
*/
INSERT INTO student VALUES (‘周润发’,60) , (‘周星驰’,66);

修改数据
– 修改语句
/*
格式:
update 表名 set 字段名1=值1 , 字段名2=值2 … where sid = ‘具体id值’

*/

ALTER TABLE student ADD sid INT(11);

– 修改sid = 2 这条数据 name修改为 刘青 年龄修改为 30
UPDATE student SET NAME=‘刘青’ ,age=30 WHERE sid = 2;

删除数据:
– 删除数据
/*
格式:
delete from 表名 where sid = 1;
*/
DELETE FROM student; – 删除所有的记录

DELETE FROM student WHERE sid = 3;
四、 SQL约束
SQL的约束:
限制,sql语句可以写什么,不可写什么

1主键约束 :

  1. 一个表中,我们会给一个字段设置成主键。
    主键的特点:1.不能为空 2.不能重复 3.用于唯一标志一条数据
    /*
    1.主键约束 : 一个表中,我们会给一个字段设置成主键。
    主键的特点:1.不能为空 2.不能重复 3.用于唯一标志一条数据
    */
    CREATE TABLE persons
    (
    #第一种添加主键的方式 把pid设置成主键
    pid INT PRIMARY KEY,
    lastname VARCHAR(255),
    firstname VARCHAR(255),
    address VARCHAR(255),
    city VARCHAR(255)
    );

DROP TABLE persons;

CREATE TABLE persons
(
pid INT ,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
city VARCHAR(255)
);

#第二种添加主键: 表已经创建好了,添加一个主键
ALTER TABLE persons ADD PRIMARY KEY (pid);

CREATE TABLE persons
(
pid INT ,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
city VARCHAR(255),
#第三种添加主键约束
CONSTRAINT per_pk PRIMARY KEY (pid)
);

– 测试一下主键: 1.非空 2,不重复
INSERT INTO persons VALUES(1,‘san’,‘zhang’,‘海淀’,‘北京’);

INSERT INTO persons VALUES(2,‘si’,‘li’,‘昌平’,‘北京’);

#我们也可以将两个字段都设置成主键(联合主键) 它两的组合不能重复
CREATE TABLE persons
(
pid INT ,
lastname VARCHAR(255),
firstname VARCHAR(255),
address VARCHAR(255),
city VARCHAR(255),
#第三种添加主键约束
CONSTRAINT per_pk PRIMARY KEY (firstname,lastname)
);

#如果是联合主键:联合主键的组合不能重复
INSERT INTO persons VALUES(2,‘张’,‘三’,‘昌平’,‘北京’);

INSERT INTO persons VALUES(2,‘三’,‘张’,‘昌平’,‘北京’);

INSERT INTO persons VALUES(2,‘si’,‘li’,‘昌平’,‘北京’);

主要记住:以后用的时候都用第一种方式:

CREATE TABLE users(
uid INT PRIMARY KEY,
NAME VARCHAR(200)
);

#删除主键:
ALTER TABLE users DROP PRIMARY KEY;

2.自动增长
如果给指定的字段给了自动增长,那么插入数据的时候就算不给它给值,那也会自动添加1 2 3 4.
/*
2.自动增长
如果给指定的字段给了自动增长,那么插入数据的时候就算不给它给值,那也会自动添加1 2 3 4.

如果有指定的字段设置成自动增长有以下要求: auto_increment

1.字段类型是int类型
2.必须是主键
*/
CREATE TABLE customer (
cid INT PRIMARY KEY AUTO_INCREMENT, #是主键,并且自动增长
cname VARCHAR(200),
age INT
);

INSERT INTO customer VALUES(NULL,‘郭靖’,20);
INSERT INTO customer VALUES(NULL,‘黄蓉’,18);
INSERT INTO customer VALUES(NULL,‘郭靖’,20);
INSERT INTO customer VALUES(NULL,‘黄蓉’,18);
INSERT INTO customer VALUES(NULL,‘郭靖’,20);
INSERT INTO customer VALUES(NULL,‘黄蓉’,18);
INSERT INTO customer VALUES(NULL,‘郭靖’,20);
INSERT INTO customer VALUES(NULL,‘黄蓉’,18);

#自动增长从100索引开始
ALTER TABLE customer AUTO_INCREMENT=100

面试题:
/*
delete 与 truncate 的区别?

delete 和truncate 都是删除数据库表中的数据.

delete 把所有的数据删除掉,里面的自动增长的序号不删除,如果再添加数据,
接着上面的需要补充值;

truncate 把表干掉,重新给创建一个表. 自动增长的序号没了.

*/
CREATE TABLE customer (
cid INT PRIMARY KEY AUTO_INCREMENT, #是主键,并且自动增长
cname VARCHAR(200),
age INT
);

INSERT INTO customer VALUES(NULL,‘郭靖’,20);
INSERT INTO customer VALUES(NULL,‘黄蓉’,18);

DELETE FROM customer;

#把表中的自动增长的索引也删了
TRUNCATE TABLE customer;

3.非空约束
我们给指定的字段设置了非空约束,那么这个字段就不能给空值。 不给就报错
/*3.非空约束
我们给指定的字段设置了非空约束,那么这个字段就不能给空值。 不给就报错
*/

CREATE TABLE customer (
cid INT PRIMARY KEY AUTO_INCREMENT, #是主键,并且自动增长
cname VARCHAR(200) NOT NULL,
age INT
);

INSERT INTO customer VALUES(NULL,NULL,12); – 报错 ,cname不能为空
INSERT INTO customer VALUES(NULL,’’,12);
INSERT INTO customer VALUES(NULL,‘aa’,12);

4.唯一约束
字段内容不可以重复
/* 4.唯一约束
字段内容不可以重复
unique
*/
CREATE TABLE customer (
cid INT PRIMARY KEY AUTO_INCREMENT, #是主键,并且自动增长
cname VARCHAR(200) UNIQUE,
age INT
);

INSERT INTO customer VALUES(NULL,‘张三’,18);
INSERT INTO customer VALUES(NULL,‘张三’,19);

CREATE TABLE customer2 (
cid INT PRIMARY KEY AUTO_INCREMENT, #是主键,并且自动增长
cname VARCHAR(200) UNIQUE,
age INT,
#使用第二种方式给age设置为唯一约束
CONSTRAINT UNIQUE (age)
);

CREATE TABLE customer3 (
cid INT PRIMARY KEY AUTO_INCREMENT, #是主键,并且自动增长
cname VARCHAR(200),
age INT

);

#第三种添加唯一约束
#ALTER TABLE persons ADD [CONSTRAINT 名称] UNIQUE (Id_P)
ALTER TABLE customer3 ADD UNIQUE (cname);

5.默认约束
我们可以给一个字段设置默认值,如果添加的时候没有给值,那他就自动设置默认值。
/* 5.默认约束
我们可以给一个字段设置默认值,如果添加的时候没有给值,那他就自动设置默认值。
*/

CREATE TABLE customer4(
cid INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20) DEFAULT ‘老王’,
age INT
);

INSERT INTO customer4 (cid, age) VALUES(NULL,22);

#删除默认约束
ALTER TABLE customer4 MODIFY cname VARCHAR(20);

6.外键约束
涉及多表。后天说

五、 SQL的查询语句

  1. 简单查询
  2. 条件查询
    在这里插入图片描述

/*
条件查询:

比较运算符 < <= = = <> 大于、小于、大于(小于)等于、不等于

BETWEEN …AND… 显示在某一区间的值(含头含尾)

IN(set) 显示在in列表中的值,例:in(100,200)

LIKE ‘张pattern’ 模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like ‘_a%’;

IS NULL 判断是否为空

and多个条件同时成立

or 多个条件任一成立

not 不成立,例:where not(salary>100);

*/

比较运算符 < <= = = <> 大于、小于、大于(小于)等于、不等于

#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname=‘花花公子’;

#查询价格为800商品
SELECT * FROM product WHERE price=800;

#查询价格不是800的所有商品
SELECT * FROM product WHERE price !=800;
SELECT * FROM product WHERE price <> 800;
SELECT * FROM product WHERE NOT(price=800);

#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price >60;

#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;

#between … and 查询一个区间的数据 (可以作为查询一个区间)
#可以查询一个时间段
SELECT * FROM product WHERE price BETWEEN 200 AND 800;
#SELECT * FROM product WHERE date BETWEEN ‘2018-11-06’ AND ‘2018-11-30’;

#查询商品价格是200或800的所有商品 or
SELECT * FROM product WHERE price = 200 OR price=800;

#如果用or 那么如果要匹配查询的数据较多,通常用in
SELECT * FROM product WHERE price IN (200,800,1,2000);
#in 删除多条数据的时候用in
DELETE FROM product WHERE price IN(200,800);

#查询含有’霸’字的所有商品
SELECT * FROM product WHERE pname LIKE ‘%霸%’; – 模糊查询

#查询以’香’开头的所有商品
SELECT * FROM product WHERE pname LIKE ‘香%’;

#查询第二个字为’想’的所有商品 占位符 _
SELECT * FROM product WHERE pname LIKE ‘_想%’;

#商品没有分类的商品 分类是null
SELECT * FROM product WHERE category_id IS NULL;

#查询有分类的商品
SELECT * FROM product WHERE category_id IS NOT NULL;

  1. 排序
    /*
    排序
    order by 指定字段 [asc/desc]
    asc代表的是升序
    desc代表是降序
    */

SELECT * FROM product;

– 根据价格排序(从小到大 升序)

SELECT * FROM product ORDER BY price; #如果不写asc 或desc 默认是asc升序

SELECT * FROM product ORDER BY price DESC;

– 多条件排序: 先按照价格排序 (降序) 价格一样的情况下 按照id排序 (降序)
SELECT * FROM product ORDER BY price DESC , pid DESC;

#补充一个点:如果有条件查询的语句 order by 在where 的条件后面

SELECT * FROM product WHERE pid IN(1,2,3,4,5,6) ORDER BY price DESC;
4. 聚合函数

/*-
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
*/

#查询商品的总条数
SELECT COUNT(*) 总条数 FROM product;

#查询价格大于200商品的总条数
SELECT COUNT(*) FROM product WHERE price > 200;

#查询分类为’c001’的所有商品的总和
SELECT SUM(price) AS 总金额 FROM product WHERE category_id = ‘c001’;

#查询分类为’c002’所有商品的平均价格
SELECT AVG(price) 分类2的均价 FROM product WHERE category_id=‘c002’;

#查询商品的最大价格和最小价格
SELECT MAX(price) 最高价 , MIN(price) 最低价 FROM product ;
5. 分组查询
/*
分组查询
SELECT 字段1,字段2… FROM 表名 where 条件查询 GROUP BY分组字段 HAVING 分组条件;

面试题: where 和having的区别是什么?
1.where条件过滤是针对于所有的查询语句. having的过滤是先分完组之后,再对分组之后的数据进行条件过滤
2.where 一般写在前面 , haviing一般写在后面

*/

– 1.统计不同分类的平均价格

SELECT category_id AS 分类 , AVG(price) 均价 FROM product GROUP BY category_id;

– 2.统计不同分类的平均价格,只显示均价大于500的数据
SELECT category_id AS 分类 , AVG(price) 均价 FROM product WHERE category_id IS NOT NULL GROUP BY category_id HAVING AVG(price) > 500;

– 如果是分组查询: 查询的字段一般是 聚合函数,或者是分组的字段
SELECT category_id, AVG(price) 均价 FROM product GROUP BY category_id;
6. 分页
/*
分页查询 : mysql的分页 limit 方言。

limit 一个数值; 查询指定条数的数据

limit 0,5; 从0索引开始查询查询5条
limit 5,5; 从5索引开始查询查询5条
*/

– 查询前5条数据
SELECT * FROM product LIMIT 5;

– 需求:一页显示5条数据 (先查询第一个页) 再查询第二页 再查询第三页.
SELECT * FROM product LIMIT 0,5;

SELECT * FROM product LIMIT 5,5;

SELECT * FROM product LIMIT 10,5;

– 计算起始页码的索引
– (当前页码-1)*每页条数

猜你喜欢

转载自blog.csdn.net/weixin_44654375/article/details/87385354