/*
DML:数据库操作语言
主要对表中的数据库进行 增删改
****增:插入一条记录
insert into 表名 (列名1,列名2..) values (值1,值2..)
注意: 1.列名可以在表中选择一列或者几列
2.后面的值 必须和前面的列 一一对应
3.在SQL中除了int类型的数据,其他数据必须用''或者""引起来
我们推荐用单引号
4.如果要插入的数据所有字段都有,那么以上的
(列名1,列名2..) 可以省略
****删:删除一条记录
格式: delete from 表名;//删除表中的所有记录
delete from 表名 where条件;
****改:修改表中的记录信息
update 表名 set 字段名 = 值;//把所有记录的该列都改了
update 表名 set 字段名 = 值 where条件;
*/
#向students 表中插入一个学生信息(id:001 name:李四 )
INSERT INTO students (sid,NAME) VALUES ('001','李四');
#向students 表中插入一个学生信息(id:002 name:王五 age:18 )
INSERT INTO students (sid,NAME,sage) VALUES ('002','王五',18);
INSERT INTO students VALUES ('003','赵六',28);
#删除students表中的记录
DELETE FROM students;
#删除某一条记录
DELETE FROM students WHERE sid=3;# 这里条件sid=3不能写成 sid==3,sid.equals(3);
#修改students表,把sage这一列的值 改为20
UPDATE students SET sage=20;
#修改students表,把王五的sage这一列的值 改为 50
UPDATE students SET sage = 50 WHERE NAME='王五';# sid = 2
/*
DQL:查询数据库中的数据
基本格式:
select [distinct] *|列名1,列名2 from 表名;# 查询表中的所有列数据
带有条件的查询 用关键字 where
*/
#基本查询
SELECT * FROM product;
SELECT pname,price FROM product;
SELECT price FROM product;
SELECT DISTINCT price FROM product;
#基本查询练习
# 1.查询所有的商品.
SELECT * FROM product;
# 2.查询商品名和商品价格.
SELECT pname,price FROM product;
# 3.去掉价格重复值.
SELECT DISTINCT price FROM product;
# 4.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
SELECT price+10 FROM product;
# 5.别名查询.使用的关键字是as(as可以省略的).
SELECT price+10 AS 打折价格 FROM product;
SELECT price+10 打折价格 FROM product;
#条件查询练习
#查询商品名称为“花花公子”的商品所有信息:
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 OR price < 800;
SELECT * FROM product WHERE NOT (price=800);
#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price > 60;
SELECT * FROM product WHERE NOT (price <= 60);
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000;
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price IN (200,800);
SELECT * FROM product WHERE price = 200 OR price = 800;
#查询含有'霸'字的所有商品
SELECT * FROM product WHERE pname LIKE '%霸%';
#查询以'香'开头的所有商品
SELECT * FROM product WHERE pname LIKE '香%';
#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%';
#查询没有分类的商品
SELECT * FROM product WHERE category_id IS NULL;
#SELECT * FROM product where category_id = null;# 错误的 判断空 不能用"="
#查询有分类的商品
SELECT * FROM product WHERE category_id IS NOT NULL;
#SELECT * FROM product WHERE category_id <> NULL;# 错误的 判断不为空 不用"<>"
#查询所有价格大于2000的电脑商品(catetory_id是c001)
#或者价格大于2000的服装商品(catetory_id是c002)**
SELECT * FROM product WHERE (price > 2000 AND category_id = 'c001')
OR (price > 2000 AND category_id = 'c002');
SELECT * FROM product WHERE price > 2000 AND category_id IN ('c001','c002');
/*
SQL语言的分类:
DDL:数据库定义语言
他主要是对数据库,数据库表进行创建删除维护等
关键字:create(创建),alter(修改),drop(删除), show(查)
DCL:数据库操纵/控制语言
控制数据库访问权限
DML:数据库操作语言
它主要是对表中的数据进行 增删改
关键字:insert(增加),delete(删除),update(修改)等
DQL:数据库查询语言
它主要是对表中的数据进行 查询
关键字:select(查询) from(从) where(条件)
*/
#注释
-- 注释
SELECT * FROM users;
/*
DDL:数据库定义语言
主要是操作数据库,操作数据库表
DDL之操作数据库:
对数据库进行增删改查
****增:创建一个数据库
create database 数据库名;//默认编号,安装的时候您选择的那个编号
create database 数据库名 charset 编码;
删:删除一个数据库
drop database 数据库名;
修:修改数据库名字很麻烦
修改正在使用的数据库
use 数据库名;
查:
查询正在使用的数据库:
select database();
查询所有的数据库
show databases;
*/
#增:创建一个数据库
CREATE DATABASE db297;
CREATE DATABASE db2971 CHARSET utf8;
#删:删除一个数据库
DROP DATABASE db2971;
#修改正在使用的数据库
USE jjj;
#查询正在使用的数据库
SELECT DATABASE();
#查询所有数据库
SHOW DATABASES;
#查询某一个数据的详细信息
SHOW CREATE DATABASE db297;
/*
DDL之数据库表
对数据库表进行增删改查
****增:创建一个表
create table 表名(
字段名1 数据类型1(长度) [约束],
字段名2 数据类型2(长度) [约束]
);
删:删除表
drop table 表名;
查:查看表
desc 表名; 查看一个表的详细信息
show tables;查看所有的表
改:改名字
rename table 表名 to 新表名;
*/
#创建一个表,学生表(编号,姓名,年龄)
CREATE TABLE student(
sid INT PRIMARY KEY, -- 主键约束
sname VARCHAR(30),
sage INT
);
#删除 student表
DROP TABLE student;
#查看一个表的详细信息
DESC student;
#查看所有的表
SHOW TABLES;
#修改表的名字
RENAME TABLE student TO students;
/*
DDL之修改表中的列
增删改查
增:增加一个列
alter table 表名 add 列名 类型(长度) [约束]
删:删除一个列
alter table 表名 drop 列名;
查:查看表的数据结构
desc 表名;
改:修改列
可以修改的名字,类型,约束等..
修改列名:
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改列的类型和约束
alter table 表名 modify 列名 类型(长度) 约束;
修改表的字符集
alter table 表名 character set 字符集;(一般不修改)
*/
#要给students表 添加一列 "电话"
ALTER TABLE students ADD phone VARCHAR(30);
#要把students表中 "电话"这一列删除
ALTER TABLE students DROP phone;
#查看students表有多少列 分别是什么
DESC students;
#修改列名
ALTER TABLE students CHANGE sname NAME VARCHAR(30);
#修改列的类型和约束
ALTER TABLE students MODIFY NAME VARCHAR(50);
/*
三个知识点:
1.介绍两个约束
主键约束: primary key 被主键约束的列必须有唯一,而且不能为空
自动增长约束:auto_increment 被自动增长约束的列,值可以不用管
2.删除表所有数据的两种方式(面试题)
delete from 表名;# 删除表的所有数据,但是自动增长值不会重置为1
truncate table 表名;# 删除表的所有数据,并且重置自动增长值为1
truncate的底层,是先摧毁表,然后再重建表
3.乱码问题
在DOS创建 查询uft8编码的数据库数据时,会出现乱码
解决方案:
临时方案:
set names gbk;//临时地把告诉数据库 我们用gbk来查询
永久方案:修改 my.ini的配置文件(不建议)
*/
#创建一张表,用户(编号,用户名,密码)
CREATE TABLE users(
uid INT PRIMARY KEY AUTO_INCREMENT,# 自动增长默认是从1开始
uname VARCHAR(30),
upass VARCHAR(30)
);
#插入数据
INSERT INTO users (uname,upass) VALUES ('王老','123321');
INSERT INTO users (uname,upass) VALUES ('李四','123');
#删除表中的所有数据
DELETE FROM users;
INSERT INTO users (uname,upass) VALUES ('王五','1234');
#使用truncate删除表中的所有数据
TRUNCATE TABLE users;
INSERT INTO users (uname,upass) VALUES ('赵六','12345');
/*
1.DDL:操作数据库中对象,数据库,表,列
***创建数据库
create database 数据库名;# 以默认的编码创建数据库
create database 数据库名 charset 编码名;
create database 数据库名 character set 编码名;
***创建表
create table 表名(
字段1 数据类型(长度) [约束],
字段2 数据类型(长度) [约束]
);
约束:
主键约束:primary key,该列的值必须唯一,并且不为空
自动增长列约束:auto_increment 该列值交给数据库维护
2.DML:操作数据库表中数据,对数据进行增删改
****添加一条记录
insert into 表名 (列名1.列名2..) values (值1,值2..);
注意:
1.列名和后面的值 必须一一对应
2.(列名1.列名2..) 这里的列名可以写一个或者多个
3.如果是全列名,可以省略不写
4.如果值是数字类型的可以不加'',否则必须加上'' 或者 ""
****删除一条记录
delete from 表名;# 删除表中所有数据,不会重置自动增长值
truncate table 表名;#删除表所有数据,先把表摧毁再重建
delete from 表名 where 条件;# 这里条件和查询共用
****修改一条记录
update 表名 set 字段名=值,字段名=值;#表中所有记录的字段都修改了
update 表名 set 字段名=值,字段名=值 where 条件;# 这里条件和查询共用
3.DQL:操作数据库表中数据,对数据进行查询
***基本查询:
格式:
select distinct *|字段1,字段2 from 表名;
***条件查询
比较条件
>,<,>=,<=,<>,=
between xx and xx (含头行尾)
in (值1,值2)
like '_a%' 模糊查询
is null ,is not null 判断空或者不空
逻辑条件
与 and
或 or
非 not
*/