1.1、sql语句是什么?
答:sql语句是和数据库交互的语言,用户通过sql语句来操作数据库。
结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特殊内容。
1.2、sql语句的分类有哪些?
四种语句类型分别是定义D、控制C、操作M和查询Q。
数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
1.3、sql语句的通用语法有哪些?
SQL语句可以单行或多行书写,以分号结尾;
可使用空格和缩进来增强语句的可读性;
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写;
例如:SELECT * FROM user。
同样可以使用/**/的方式完成注释;
MySQL中的我们常使用的数据类型如下
1.4、DDL之数据库操作:database
创建数据库、指定数据的编码格式:CREATE DATABASE webdb_2 CHARACTER SET utf8;
查看MySQL服务器中的所有的数据库:show database;
查看某个数据库定义的信息:show create database webdb_1;
删除数据库:drop database webdb_2;
查看正在使用的数据库:select database();
切换数据库:use webdb_1;
1.5、DDL之表操作:table
USE webdb_1;#使用某一数据库
CREATE TABLE category(
cid INT PRIMARY KEY,#分类id
cname VARCHAR(100) #分类名称
);
SELECT * FROM category;#查看表内容
SHOW TABLES;#查看数据库中的表
DESC category;#表的描述
DROP TABLE category;#删除表
SHOW TABLES;
ALTER TABLE category ADD 'desc' VARCHAR(20);#错的
ALTER TABLE category ADD `desc` VARCHAR(20);#修改表添加列
ALTER TABLE category MODIFY 'desc' VARCHAR(50) NOT NULL;#错的
ALTER TABLE category MODIFY `desc` VARCHAR(50) NOT NULL;#修改表中列的长度及约束
ALTER TABLE category CHANGE `desc` description VARCHAR(30);#修改表中列名
ALTER TABLE category DROP description;#删除表中字段
RENAME TABLE category TO category2;#修改表明
ALTER TABLE category2 CHARACTER SET gbk;#修改表的编码字符集
1.6、DML数据操作语言
插入:
-- 向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..);
-- 向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values (值1,值2,值3..);
注意:
值与字段必须对应,个数相同,类型相同
值的数据大小必须在字段的长度范围内
除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
如果要插入空值,可以不写字段,或者插入 null。
例如:
INSERT INTO category(cid,cname) VALUES('c001','电器');
INSERT INTO category(cid,cname) VALUES('c002','服饰');
INSERT INTO category(cid,cname) VALUES('c003','化妆品');
INSERT INTO category(cid,cname) VALUES('c004','书籍');
INSERT INTO category(cid) VALUES('c005');
INSERT INTO category(cname,cid) VALUES('耗材','c006');
修改:
--更新所有记录的指定字段
update 表名 set 字段名=值,字段名=值,...;
--更新符合条件记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件;
注意:
列名的类型与修改的值要一致.
修改值得时候不能超过最大长度.
除了数值类型外,其它的字段类型的值必须使用引号引起
删除:
删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将值为零,从新开始。
1.7、DOS操作数据中文乱码问题
问题:
insert into category(cid,cname) values(‘c010’,’中文’);
ERROR 1366 (HY000): Incorrect string value: '\xB7\xFE\xD7\xB0' for column 'cname' at row 1
解决:
1.在cmd命令窗口中输入:set names gbk;此命令窗口下临时有效。
2.安装目录下修改my.ini文件,重启服务所有地方生效。[不建议]
错误原因:因为mysql的客户端设置编码是utf8,而系统的cmd窗口编码是gbk
show variables like 'character%'; 查看所有mysql内部设置的编码
修改client、connection、results的编码和客户端一致(GBK编码)
#方式1:单独设置
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;
#方式2:快捷设置
set names gbk;
1.8、DQL数据查询语言
#创建商品表:
create table product(
pid int primary key,
pname varchar(20),
price double,
category_id varchar(32)
);
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'JACK JONES',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'果9',1,NULL);
简单查询:
1.查询所有的商品. select * from product;
2.查询商品名和商品价格. select pname,price from product;
3.别名查询.使用的关键字是as(as可以省略的).
3.1表别名: select * from product as p;
3.2列别名:select pname as pn from product;
4.去掉重复值. select distinct price from product;
5.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
select pname,price+10 from product;
SELECT * FROM product;#查询商品表所有数据
SELECT DISTINCT price FROM product;#价格去重后的商品表数据
SELECT pname,price+10 FROM product;#价格统一加10
SELECT * FROM product WHERE pname = '花花公子';#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE price = 800;#查询价格为800商品
SELECT * FROM product WHERE price !=800;#查询价格不是800的所有商品
SELECT * FROM product WHERE price <>800;
SELECT * FROM product WHERE NOT(price=800);
SELECT * FROM product WHERE price >60;#查询商品价格大于60元的所有商品信息
SELECT * FROM product WHERE price >=200 AND price =<1000;#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
SELECT * FROM product WHERE price =200 OR price =800#查询商品价格是200或800的所有商品
SELECT * 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 '_想';#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE category_id IS NULL;#商品没有分类的商品
SELECT * FROM product WHERE category_id IS NOT NULL;#查询有分类的商品