1.创建数据库:
图形工具:右键创建 goods
字符集: utf8 -- UTF-8 Unicode
排序规则: utf8_general_ci
创建数据库(非图形工具): CREATE DATABASE goods;
2.删除数据库: DROP DATABASE goods;
3.创建表
CREATE TABLE employee(
dept VARCHAR(50),
sno VARCHAR(50),
NAME VARCHAR(50),
age INT,
gender CHAR(2),
entry_time DATE
)
3.1 外键的设置
学生表student (sno,sname)
课程表course (cno,cname)
选课表sc (sno,cno,score)
选课表中sno,cno分别是学生表sno,课程表cno的外键
图形界面设置外键
sql语句设置外键:
ALTER TABLE tb_active ADD CONSTRAINT FK_ID FOREIGN KEY(user_id) REFERENCES tb_user(id)
user_id 是id的外键
ALTER TABLE sc ADD CONSTRAINT FK_ID FOREIGN KEY(sno) REFERENCES student(sno)
选课表中sno是学生表sno 的外键
ALTER TABLE sc ADD CONSTRAINT FK_ID2 FOREIGN KEY(cno) REFERENCES course(cno)
4..删除表: DROP TABLE 表
5.插入数据
INSERT INTO employee
(dept,sno,NAME,age,gender,entry_time)
VALUES
('软件开发部','100010','张三',25,'男','2008/04/01');
6.删除数据
DELETE FROM employee
WHERE NAME='李四';
7.更改数据
UPDATE employee
SET dept='人事部',age=20
WHERE NAME='张三';
8.查询数据
SLEECT的基本语法形式如下:
SELECT 属性列表
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 属性名1] [HAVING 条件表达式2]
[ORDER BY 属性名2[ASC|DESC]]
'属性列表'参数表示需要查询的字段名;
'表名'参数表示此处指定的表,表可以有多个;
'条件表达式1'参数指定查询条件;
GROUP BY:'属性名1'参数指按该字段中的数据进行分组;
ORDER BY:'属性名2'参数指按该字段中的数据进行排序
'ASC'参数按升序的顺序排序,默认排序;(从小到大)
'DESC'参数按降序的顺序进行排序。(从大到小)
GROUP BY子句通常和COUNT()、SUM()等聚合函数一起使用。
单表查询:
CREATE TABLE employee(
num INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
d_id INT NULL,
name VARCHAR(20),
age INT,
gender VARCHAR(4),
homeaddr VARCHAR(50)
)
1.查询所有字段
SELECT num, d_id, name, age, gender, homeaddr FROM employee;
SELECT * FROM employee;
2.查询指定字段
SELECT num, name, gender, homeaddr FROM employee;
3. 查询指定记录
SELECT * FROM employee WHERE d_id=1001;
4.带IN关键字的查询
IN关键字可以判断某个字段的值是否在指定的集合中。
语法规则如下:
[NOT] IN(元素1, 元素2,...,元素n)
查询条件 符号或关键字
比较 =, <, <=, >, >=, !=, <>, !>, !<
指定范围 BETWEEN AND, NOT BETWEEN AND
指定集合 IN, NOT IN
匹配字符 LIKE, NOT LIKE
是否为空值 IS NULL, IS NOT NULL
多个查询条件 AND, OR
(1)使用IN关键字查询。
SELECT * FROM employee WHERE d_id IN(1001,1004);
(2)使用NOT IN关键字查询, 而且集合元素为字符型数据。
SELECT * FROM employee WHERE name NOT IN('张三','李四');
5.带BETWEEN AND的范围查询
BETWEEN AND关键字可以判断某个字段的值是否在指定的范围内
语法规则如下:
[NOT] BETWEEN 取值1 AND 取值2
(1)使用BETWEEN AND关键字进行查询,查询条件是age字段取值从15到25。
SELECT * FROM employee WHERE age BETWEEN 15 AND 25;
(2)使用NOT BETWEEN AND关键字查询employee表。查询条件是age字段的取 值不在15到25之间。
SELECT * FROM employee WHERE age NOT BETWEEN 15 AND 25;
6.带LIKE的字符匹配查询
LIKE关键字可以匹配字符串是否相等
语法规则如下:
[NOT] LIKE '字符串'
SELECT * FROM employee WHERE name LIKE '赵';
SELECT * FROM employee WHERE homeaddr LIKE '北京%';
SELECT * FROM employee WHERE homeaddr LIKE '%区';
7.查询空值
IS NULL 关键字可以用来判断字段的值是否为空值(NULL)
语法规则如下:
IS [NOT] NULL
其中,'NOT'是可选参数,加上NOT表示字段不是空值时满足条件。
CREATE TABLE work(
id INT,
name VARCHAR(20),
gender VARCHAR(4),
info VARCHAR(50)
)
SELECT * FROM work WHERE info IS NULL;
SELECT * FROM work WHERE info IS NOT NULL;
8.带AND的多条件查询
AND关键字可以用来联合多个条件进行查询
如果不满足这些查询条件的其中一个,这样的记录将被排除掉
语法规则如下:
条件表达式1 AND 条件表达式2 [... AND 条件表达式n]
其中,AND可以连接两个条件表达式。
SELECT * FROM employee
WHERE d_id<1004
AND gender LIKE '男';
9.用LIMIT限制查询结果的数量
用来指定查询结果从哪条记录开始显示,还可以指定一共显示多少条记录
两种方式分别是不指定初始位置和指定初始位置。
SELECT * FROM employee LIMIT 2;
SELECT * FROM employee LIMIT 2, 2;
10.查询以特定字符或字符串开头的记录
使用字符'^'可以匹配特定字符或字符串开头的记录
CREATE TABLE info(
id INT,
name VARCHAR(20)
)
INSERT INTO info VALUES(1, 'Aric');
INSERT INTO info VALUES(2, 'Eric');
INSERT INTO info VALUES(3, 'Jame');
INSERT INTO info VALUES(4, 'Jack');
INSERT INTO info VALUES(5, 'Lucy');
INSERT INTO info VALUES(6, 'Lily')
INSERT INTO info VALUES(7, 'Tom');
INSERT INTO info VALUES(8, 'aaa');
INSERT INTO info VALUES(9, 'dadaaa');
INSERT INTO info VALUES(10, '2323');
INSERT INTO info VALUES(11, 'bbdfec12');
INSERT INTO info VALUES(12, '212abc');
INSERT INTO info VALUES(13, 'werabc');
SELECT * FROM info WHERE name REGEXP '^L';
SELECT * FROM info WHERE name REGEXP '^aaa';
SELECT * FROM info WHERE name REGEXP '^L';
SELECT * FROM info WHERE name REGEXP '^aaa';
11.查询以特定字符或字符串结尾的记录
SELECT * FROM info WHERE name REGEXP 'c$';
SELECT * FROM info WHERE name REGEXP 'aaa$';
12.用符号'.'来替代字符串任意一个字符
SELECT * FROM info WHERE name REGEXP '^L..y$'
13.匹配指定字符串的任意一个
使用方括号([])可以将需要查询字符组成一个字符集。只要记录中包含方括 号中的任意字符,该记录将会被查询出来。例如,通过"[abc]"可以查询包 括a、b、c这三个字母中任何一个的记录。
SELECT * FROM info WHERE name REGEXP '[ceo]';
SELECT * FROM info WHERE name REGEXP '[0-9]';
14.匹配指定字符以外的字符
使用'[^字符集合]'可以匹配指定字符以外的字符。从info表字段中查询包 含a到w字母和数字以外的字符的记录。
SELECT * FROM info WHERE name REGEXP '[^a-w0-9]';
15.匹配指定字符串
正则表达式可以匹配字符串。当表中的记录包含这个字符串时,就可以将该 记录查询出来。如果指定多个字符串时,需要用符号'|'隔开。只要匹配这 些字符串中的任意一个即可。
SELECT * FROM info WHERE name REGEXP 'ic';
SELECT * FROM info WHERE name REGEXP 'ic|ab|uc';
16.使用'*'和'+'来匹配多个字符
正则表达式中,'*'和'+'都可以匹配多个该符号之间的字符。
但是,'+'至少 表示一个字符,而'*'可以表示零个字符。
SELECT * FROM info WHERE name REGEXP 'a*c';
SELECT * FROM info WHERE name REGEXP 'a+c';
17. 使用{M}或者{M,N}来指定字符串连续出现的次数
正则表达式中,'字符串{M}'表示字符串连续出现M次;
'字符串{M,N}'表示字符串联连续出现至少M次,最多N次
'ab{2}'表示字符串'ab'连续出现两次。'
ab{2,4}'表示字符串'ab'连续出现至少两次,最多四次
SELECT * FROM info WHERE name REGEXP 'a{3}';
SELECT * FROM info WHERE name REGEXP 'ab{1,3}';
使用聚合函数查询
聚合函数包括COUNT()、SUM()、AVG()、MAX()和MIN()。
COUNT()用来统计记录的条件;
SUM()用来计算字段的值的总和;
AVG()用来计算字段的值的平均值;
MAX()用来查询字段的最大值;
MIN()用来查询字段的最小值。
1. COUNT函数
COUNT()函数用来统计记录的条数。如果要统计employee表中有多少条记录,可以使用COUNT()函数。如果要统计employee表中不同部门的人数,也可以使用COUNT()函数。使
SELECT COUNT(*) FROM employee;
SELECT d_id, COUNT(*) from employee GROUP BY d_id;
2 .SUM()函数
SUM()函数是求和函数。使用SUM()函数可以求出表中某个字段取值的总和。例如,可以用SUM()函数来求学生的总成绩。
CREATE TABLE grade(
num INT NOT NULL,
course VARCHAR(10) NOT NULL,
score FLOAT
)
INSERT INTO grade VALUES
(1001, '数学', 80),
(1001, '语文', 90),
(1001, '英语', 85),
(1001, '计算机', 95),
(1002, '数学', 88),
(1002, '语文', 90),
(1002, '英语', 89),
(1002, '计算机', 90),
(1003, '数学', 80),
(1003, '语文', 98),
(1003, '英语', 85),
(1003, '计算机', 95);
SELECT * FROM grade WHERE num=1001;
SELECT num, SUM(score) FROM grade WHERE num=1001;
SELECT num, SUM(score) FROM grade GROUP BY num;
3. AVG()函数
AVG()函数是求平均值的函数。使用AVG()函数可以求出表中某个字段取值的平均值。例如,可以用AVG()函数来求平均年龄,也可以使用AVG()函数来求学生的平均成绩。
SELECT AVG(age) FROM employee;
SELECT course, AVG(score) FROM grade GROUP BY course;
SELECT num, AVG(score) FROM grade GROUP BY num;
4 .MAX()函数
MAX()函数是求最大值的函数。使用MAX()函数可以求出表中某个字段取值的最大值。例如,可以用MAX()函数来查询最大年龄,也可以使用MAX()函数来求各科的最高成绩。
SELECT MAX(age) FROM employee;
SELECT num, course, MAX(score) FROM grade GROUP BY course;
5 .MIN()函数
MIN()函数是求最小值的函数。使用MIN()函数可以求出表中某个字段取值的最小值。例如,可以用MIN()函数来查询最小年龄,也可以使用MIN()函数来求各科的最小成绩。
SELECT MIN(age) FROM employee;
SELECT num, course, MIN(score) FROM grade GROUP BY course;