-- 查询 student 表中的 name、sex 和 class 字段的所有行 SELECT name, sex, class FROM student;
-- 查询 teacher 表中不重复的 department 列 -- department: 去重查询 SELECTDISTINCT department FROM teacher;
-- 查询 score 表中成绩在60-80之间的所有行(区间查询和运算符查询) -- BETWEEN xx AND xx: 查询区间, AND 表示 "并且" SELECT*FROM score WHERE degree BETWEEN60AND80; SELECT*FROM score WHERE degree >60AND degree <80;
-- 查询 score 表中成绩为 85, 86 或 88 的行 -- IN: 查询规定中的多个值 SELECT*FROM score WHERE degree IN (85, 86, 88);
-- 查询 student 表中 '95031' 班或性别为 '女' 的所有行 -- or: 表示或者关系 SELECT*FROM student WHERE class ='95031'or sex ='女';
-- 以 class 降序的方式查询 student 表的所有行 -- DESC: 降序,从高到低 -- ASC(默认): 升序,从低到高 SELECT*FROM student ORDERBY class DESC; SELECT*FROM student ORDERBY class ASC;
-- AVG: 平均值 SELECTAVG(degree) FROM score WHERE c_no ='3-105'; SELECTAVG(degree) FROM score WHERE c_no ='3-245'; SELECTAVG(degree) FROM score WHERE c_no ='6-166';
-- GROUP BY: 分组查询 SELECT c_no, AVG(degree) FROM score GROUPBY c_no;
-- INNER JOIN: 表示为内连接,将两张表拼接在一起。 -- on: 表示要执行某个条件。 SELECT*FROM person INNERJOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ |1| 张三 |1|1| 饭卡 | |2| 李四 |3|3| 农行卡 | +------+--------+--------+------+-----------+
-- 将 INNER 关键字省略掉,结果也是一样的。 -- SELECT * FROM person JOIN card on person.cardId = card.id;
左外连接
1 2 3 4 5 6 7 8 9
-- LEFT JOIN 也叫做 LEFT OUTER JOIN,用这两种方式的查询结果是一样的。 SELECT*FROM person LEFTJOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ |1| 张三 |1|1| 饭卡 | |2| 李四 |3|3| 农行卡 | |3| 王五 |6|NULL|NULL| +------+--------+--------+------+-----------+
右外链接
1 2 3 4 5 6 7 8 9 10
SELECT*FROM person RIGHTJOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ |1| 张三 |1|1| 饭卡 | |2| 李四 |3|3| 农行卡 | |NULL|NULL|NULL|2| 建行卡 | |NULL|NULL|NULL|4| 工商卡 | |NULL|NULL|NULL|5| 邮政卡 | +------+--------+--------+------+-----------+
全外链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-- MySQL 不支持这种语法的全外连接 -- SELECT * FROM person FULL JOIN card on person.cardId = card.id; -- 出现错误: -- ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'
-- MySQL全连接语法,使用 UNION 将两张表合并在一起。 SELECT*FROM person LEFTJOIN card on person.cardId = card.id UNION SELECT*FROM person RIGHTJOIN card on person.cardId = card.id; +------+--------+--------+------+-----------+ | id | name | cardId | id | name | +------+--------+--------+------+-----------+ |1| 张三 |1|1| 饭卡 | |2| 李四 |3|3| 农行卡 | |3| 王五 |6|NULL|NULL| |NULL|NULL|NULL|2| 建行卡 | |NULL|NULL|NULL|4| 工商卡 | |NULL|NULL|NULL|5| 邮政卡 | +------+--------+--------+------+-----------+
// for i := 101; i <= 109; i++ { // queryOne(i) // }
queryMore(101) }
1 2 3 4 5 6 7
funcupdateDB(db *sql.DB,name string,id int) { stmt, err := db.Prepare("update test set name = ? where id = ?",name,id) if err != nil{ log.Fatal(err) } stmt.Exec(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
funcselectDB(db *sql.DB) { stmt, err := db.Query("select * from test;") if err != nil { log.Fatal(err) } defer stmt.Close() for stmt.Next(){ var id int var name string //var name sql.NullString err := stmt.Scan(&id,&name) if err != nil {my log.Fatal(err) } fmt.Println(id,name) }