1、建库
2、库里让两个表,有关键字
3、表里分别插入两条数据
4、建一个视图
5、创建并调用一个存储过程,可以输入学号查询姓名
6、查询:单表查询(包括 where oeder by groupby 等)可以写多条语句
了、查询:两个表内连接查询
8、子查询
9、创建并调用存储函数,输入半径求面积
下面是一个sql简单脚本,有详细注释,希望能帮到你:
-- 创建数据库
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
-- 创建表1
CREATE TABLE IF NOT EXISTS table1 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
keyword VARCHAR(50)
) ENGINE=InnoDB;
-- 插入表1数据
INSERT INTO table1 (name, keyword) VALUES ('Tom', 'apple'), ('John', 'orange');
-- 创建表2
CREATE TABLE IF NOT EXISTS table2 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
keyword VARCHAR(50)
) ENGINE=InnoDB;
-- 插入表2数据
INSERT INTO table2 (name, keyword) VALUES ('Alice', 'banana'), ('Bob', 'grape');
-- 创建视图
CREATE VIEW IF NOT EXISTS view1 AS
SELECT name, keyword FROM table1 WHERE keyword='apple'
UNION ALL
SELECT name, keyword FROM table2 WHERE keyword='banana';
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE IF NOT EXISTS get_name_by_id(IN id INT)
BEGIN
SELECT name FROM table1 WHERE id = id;
END //
DELIMITER ;
-- 调用存储过程
CALL get_name_by_id(1);
-- 单表查询
SELECT * FROM table1 WHERE keyword='apple' ORDER BY id DESC;
SELECT COUNT(*) FROM table1 WHERE keyword='apple';
SELECT name, COUNT(*) FROM table1 GROUP BY name;
-- 两个表连接查询
SELECT * FROM table1 JOIN table2 ON table1.keyword=table2.keyword;
-- 子查询
SELECT * FROM table1 WHERE keyword IN (SELECT keyword FROM table2);
-- 创建存储函数
DELIMITER //
CREATE FUNCTION IF NOT EXISTS get_area(IN r FLOAT)
RETURNS FLOAT
BEGIN
RETURN 3.1415926535 * r * r;
END //
DELIMITER ;
-- 调用存储函数
SELECT get_area(3.0);
不知道你这个问题是否已经解决, 如果还没有解决的话:在select中使用group by 子句可以对指定列进行分组查询。
select column1, column2, … from table group by column;
可以通过MySQL的命令行界面或者图形化界面(如Navicat)进行建库。
在命令行中,可以使用以下语句来建立一个名为example的数据库:
CREATE DATABASE example;
在图形化界面中,可以选择“新建数据库”,并填写相关信息。
可以使用以下语句在example数据库中创建两个表,一个叫做students,一个叫做courses:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
major VARCHAR(50)
);
CREATE TABLE courses (
id INT PRIMARY KEY,
course_name VARCHAR(50),
teacher_name VARCHAR(50)
);
这里的students表中包含id、name、age和major这四个字段,其中id是主键;courses表中包含id、course_name和teacher_name这三个字段,其中id也是主键。
可以使用以下语句在两张表中分别插入两条数据:
INSERT INTO students (id, name, age, major) VALUES (1, '张三', 20, '计算机科学');
INSERT INTO students (id, name, age, major) VALUES (2, '李四', 21, '软件工程');
INSERT INTO courses (id, course_name, teacher_name) VALUES (1, '数据库', '王老师');
INSERT INTO courses (id, course_name, teacher_name) VALUES (2, '数据结构', '李老师');
这里分别向students和courses表中插入了两条数据。
可以使用以下语句在example库中创建一个视图,用于查询学生及其所选课程信息:
CREATE VIEW student_course AS
SELECT s.name AS student_name, s.major, c.course_name, c.teacher_name
FROM students s
JOIN courses c ON s.id = c.id;
这里的视图名字为student_course,其中用到了JOIN连接,将students表和courses表的数据进行了关联。
可以使用以下语句在example库中创建一个名为find_name的存储过程:
CREATE PROCEDURE find_name(IN student_id INT)
BEGIN
SELECT name FROM students WHERE id = student_id;
END;
其中,IN关键字表示这个存储过程需要传入一个参数,这里是学生的id;BEGIN和END之间是存储过程的主体,可以在这里写代码实现查询学生姓名的功能。
以下是一些常见的单表查询语句:
SELECT * FROM students; # 查询所有学生信息
SELECT name, age FROM students WHERE major = '计算机科学'; # 查询计算机科学专业的学生的姓名和年龄
SELECT name, age FROM students ORDER BY age DESC; # 按照年龄从大到小查询学生姓名和年龄,并进行排序
SELECT major, COUNT(*) FROM students GROUP BY major; # 统计每个专业的学生人数
可以使用以下语句进行两个表的内连接查询:
SELECT s.name AS student_name, c.course_name, c.teacher_name
FROM students s
JOIN courses c ON s.id = c.id;
这里用到了JOIN连接,将students表和courses表的数据进行了关联。
子查询就是查询语句中嵌套了另一个查询语句,在内层查询中先得到所需的结果,再将这个结果作为外层查询的条件。
以下是一个使用子查询的示例:
SELECT name
FROM students
WHERE id IN (SELECT id FROM courses WHERE course_name = '数据库');
这里先从courses表中查询课程名为“数据库”的记录,得到这些课程所对应的id,再将这些id作为条件查询students表,得到选修这门课程的学生姓名。
可以使用以下语句在example库中创建一个名为calculate_area的存储函数:
CREATE FUNCTION calculate_area(radius INT) RETURNS INT
BEGIN
DECLARE pi FLOAT DEFAULT 3.14;
DECLARE result FLOAT;
SET result = pi * radius * radius;
RETURN ROUND(result);
END;
其中,radius是存储函数需要接收的参数,这里是圆的半径;DECLARE关键字声明了两个变量pi和result;SET关键字对result进行了计算,最后使用RETURN关键字将计算结果返回。这个存储函数的功能是用输入的半径计算出圆的面积并返回。