一、创建数据库表
1.student表
CREATE TABLE `studb`.`student`(
`id`INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,`name` VARCHER(45) NOT NULL,`sex` VARCHER(45) NOT NULL DEFAULT 'male',`age` INTEGER NOT NULL,`major` VARCHER(45) NOT NULL,PRIMARY KEY(`id`)
)
2.数据库表
二、MySQL基本语法
1.使用SELECT语句查询数据
- SELECT<列名> FROM<表名> [WHERE<查询条件>]
- SELECT * FROM student
2.使用INSERT语句插入数据
- INSERT [INTO] <表名> [列名] VALUES<值列表>
- INSERT [INTO] student (name,sex,age,major) values("黄山","male",19,"计算机")
- INSERT [INTO] student values (0,"a","b",19,"c")
- 注:种子列插入时使用0
3.使用UPDATE语句更新数据
- UPDATE <表名> SET <列名=更新值> [WHERE<更新条件>]
- UPDATE student SET age=20 WHERE name="李勇"
4.使用DELETE语句删除数据
- DELETE FROM <表名> [WHERE<删除条件>]
- DELETE FROM student
三、高级查询
1.查询的基本形式
SELECT<列名>
FROM<表名>
[WHERE <查询条件表达式>] (过滤条件)
[ORDER BY <排序的列名>[ASC或DESC]] (排序条件)
例1:select * from student order by age;
例2:select * from student order by age asc,id desc;
2.使用AS重命名列
重命名的列名可以加单引号也可不加
例3:select id as 学生编号,name as n from student;
省略AS重命名列名
例4:select id 学生编号,name n from student;
3.使用limit限制行数
例5:查询customers表前10条记录
select * from customers limit 10;
select * from customers limit 0,10;
例6:查询第6-10条记录
select * from customers limit 5,5;
4.模糊查询
(1)通配符
(2)LIKE
模糊查询的字符串内容必须加单引号或双引号
例7:select * from student where name like "李_";
select * from student where sex like 'fe%';
注意:等号连接字段内容被视为普通字符,不能使用等号进行模糊查询
select * from student where sex=fe%';
(3)BETWEEN…AND
模糊查询的字符串内容必须加单引号或双引号
例8:
半闭半开区间
select * from student where name between 'a%' and 'c%';
闭区间
select * from student where age between 18 and 20;
select * from student where name between '李%' and '张%';
(4)IN
范围内进行查询
例9:显示专业使计算机和数学的学生信息
select * from student where major="计算机" or major="数学";
select * from student where major in('计算机','数学');
(5)NULL
查询字段内容是否为空
例10:
显示专业为空的学生信息
select * from student where major is null;
显示专业不为空的学生信息
select * from student where major is not null;
四、聚合函数
1.COUNT()统计字段值的数目
select count(*) from student;
2.SUM()计算字段值的和(参数为数字)
select sum(age) from student;
3.AVG()计算字段的平均值(参数为数字)
select avg(age) from student;
4.MAX()返回最大值(参数可以为字符串)
select max(age) from student;
5.MIN()返回最小值(参数可以为字符串)
select min(age) from student;
五、分组查询
CREATE TABLE `studb`.`testing`
(
`id` int(10) unsigned NOT NULL auto_increment,`studentId` int(11) NOT NULL,`course` varchar(45) NOT NULL,`grade` varchar(45) NOT NULL, PRIMARY KEY (`id`))
ENGINE=InnoDB DEFAULT CHARSET=gbk;
1.在select语句中可以们更用group by子句将行划分成较小的组,然后,使用聚合函数返回每一个组的汇总信息,可以使用having子句限制返回的结果集。group by子句可以将查询结果分组,并返回行的汇总信息按照group by子句中指定的表达式的值分组查询结果。
2.注:在where条件中不能使用聚合函数。
例11:select distinct age from student group by sex;
查询考试科目大于2的学生id
select studentid from testing group by studentid having count(*)>2;
六、子查询
1.简单子查询
(1)子查询在WHERE语句中的一般用法:
- SELECT… FROM 表1 WHERE 字段1>(子查询)
- '>'可以替换为其它运算符
- 外面的查询称为父查询,括号中嵌入的查询称为子查询
(2)UPDATE、INSERT、DELETE也可以使用子查询,语法类似于SELECT语句
例12:查询年龄大于欧阳丹丹的学生信息
select * from student where age>(select age from student where name="欧阳丹丹")
2.IN子查询
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个,否则不允许将子查询写在=、!=、<>、<、<=、>、>=之后
查询年龄大于选数学专业的学生信息
select * from student where age>(select age from student where major="数学") ×
例13:查询数学与计算机专业学生的考试信息
select * from testing where studentid in (select id from student where major="数学" or major="计算机")
查询不是数学与计算机专业学生的考试信息
select * from testing where studentid not in (select id from student where major="数学" or major="计算机")
七、联结查询
1.内联结(INNER JOIN)
select * from student as s inner join testing as t on s.id=t.studentid;
2.外联结
左外联结(LEFT JOIN )
select * from student as s left join testing as t on s.id=t.studentid;
右外联结(RIGHT JOIN)
select * from student as s right join testing as t on s.id=t.studentid;
3.交叉联结(CROSS JOIN)
笛卡尔积
select * from student as s cross join testing as t on s.id=t.studentid;