-- 添加新的数据行-- 1、利用 INSERT 语句添加数据-- (1)、一次性地列出全部数据列的值INSERTINTO student VALUES ('kyle','M',NULL );INSERTINTO grade_event VALUES ('2017-12-03','Q',NULL );INSERTINTO student VALUES ('Avery','F',NULL),('Nathan','M',NULL);-- 字符串和日期值必须放在 '' 或者 "" 里才能被引用,放在 '' 里更加标准。-- 在一个 auto_increment 数据列里插入一个表示"无数据"的 NULL 值时,MySQL 会为这个数据列自动生成下一个序号。-- (2)、直接对数据列进行赋值INSERTINTO member (last_name,first_name) VALUES ('Stein','Waldo');INSERTINTO student (name, sex) VALUES ('Abby','F'),('Joseph','M');-- (3)、包含 col_name = value(而非values()列表)的 SET 子句对数据列赋值INSERTINTO member SET last_name='Stein',first_name='Waldo';-- 不允许一次插入多个数据行-- 2、通过从文件中读取来添加新行(后续详解)LOAD DATA LOCAL INFILE 'member.txt'INTOTABLE member;
检索信息
-- 检索信息SELECT * FROM president;-- 注意:数据库和数据表的名字可能区分字母的大小写,取决于服务器主机上所使用的文件系统,以及 MySQL 的配置情况-- Windows 文件名不区分大小写,Unix 文件区分大小写-- 1、指定检索条件SELECT * FROM score WHERE score > 95;-- 以下两句相同效果SELECT last_name,first_name,state FROM president
WHERE state='VA'OR state='MA';SELECT last_name,first_name,state FROM president
WHERE state IN ('VA','MA');-- 2、NULL 值-- 完成 NULL 值与 NULL 值之间的比较SELECT * FROM president WHERE death ISNULL ;SELECT * FROM president WHERE death <=> NULL;SELECT * FROM president WHERE suffix ISNOTNULL;SELECT * FROM president WHERENOT (suffix<=> NULL);-- 3、对查询结果进行排序默认升序: ASC升序 DESC降序SELECT * FROM president ORDERBY last_name DESC,first_name ASC;-- 对于 NULL 值的数据行,升序在开头,降序在末尾。SELECT * FROM president ORDERBYif(death ISNULL ,0,1),death DESC;-- IF():对第一个参数进行求值。如果 death 为 NULL,返回 0,如果 death 不为 NULL,返回 1-- 4、限制查询结果中的数据行数SELECT * FROM president ORDERBY brith LIMIT 5;-- 查询结果的前 5 条SELECT * FROM president ORDERBY brith DESC LIMIT 10,5;-- 查询结果的第 11-15 条。SELECT * FROM president ORDERBY rand() LIMIT 1;-- 随机取出一条-- 5、对输出列进行求值和命名SELECT concat(first_name,' ',last_name) AS'Name', concat(city,',',state) AS'Brithplace'FROM president;-- concat():合并多列; AS:设置别名-- 6、日期有关-- 日期中的年、月、日三部分可以用函数 year()、month()、dayofmonth() 分离出来SELECT * FROM president WHEREmonth(brith) = 3;SELECT * FROM president WHERE timestampdiff(YEAR,brith,death) = 21;-- 查询出 death、brith 相差的年数-- to_days() 将日期转换为天数SELECT date_add('2017-1-1',INTERVAL10MONTH);-- 返回 2017-11-01SELECT date_sub('2017-12-20',INTERVAL10MONTH);-- 返回 2017-02-20-- 7、模式匹配SELECT * FROM president WHERE last_name LIKE'W%';SELECT * FROM president WHERE last_name LIKE'____';-- 查询出姓氏仅由4个字母构成的-- 8、设置和使用 SQL 变量-- 变量命名:@变量名 := 值SELECT @brith := brith FROM president -- 查询出来的结果保存在 brith 变量中,供今后查询
WHERE last_name='Jackson'AND first_name = 'Andrew';-- 调用变量:@变量名SELECT * FROM president WHERE brith < @brith ORDERBY brith;-- set 语句也能用来对变量赋值,此时,'=' 和 ':=' 都可以用做赋值操作符SET @today = curdate();SET @one_week_ago := date_sub(@today , INTERVAL7DAY);SELECT @today,@one_week_ago;-- 9、生成统计信息-- distinct:清除查询结果中重复出现的数据行SELECTDISTINCT state FROM president ORDERBY state;-- count(*) 返回查询结果的行数(非 NULL)SELECTcount(*) FROM member;SELECTcount(*),count(email),count(expiration) FROM member;SELECTcount(DISTINCT state) FROM president;SELECT sex,count(*) FROM student GROUPBY sex;SELECTmonth(brith) ASMonth,monthname(brith) AS Name, count(*) AScountFROM president
GROUPBY Name
ORDERBYMonth;-- 上一条语句不符合 MySQL 对于 ONLY_FULL_GROUP_BY 语义的判断规则,所以需要去除 ONLY_FULL_GROUP_BY 语义规则SETGLOBAL SQL_MODE='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';-- 查询全局变量 SQL_MODE 的值SELECT @@global.SQL_MODE;-- count() 之类的汇总函数的计算结果允许在 having 子句中出现SELECT state,count(*) AScountFROM president
GROUPBY state HAVINGcount > 1ORDERBYcountDESC;-- 如果想输出"统计结果",那就增加一条 with rollup 子句-- 作用:分组统计结果的汇总统计值SELECT sex,count(*) FROM student GROUPBY sex WITH ROLLUP;-- 10、多个数据表里检索信息-- 联结:join && 子查询:select 语句嵌套一个 select 语句-- ①、联结查询SELECT st.name,g.data,s.score,g.category
FROM grade_event g INNERJOIN score s INNERJOIN student st
ON g.event_id = s.event_id
AND s.student_id = st.student_id
WHERE g.data = '2008-09-23';-- 左外联结:left join 输出左边表数据表中的每一条记录SELECT s.student_id,s.name,count(a.date) AS absences
FROM student s LEFTJOIN absence a
ON s.student_id = a.student_id
GROUPBY s.student_id;-- ②、子查询:查出全勤的学生SELECT * FROM student
WHERE student_id NOTIN (SELECT student_id FROM absence);
删除或更新数据行
DELETEFROM president WHERE state = 'OH';UPDATE member SET email='123@qq.com',street='123 Elm St',city='Anytown',state='NY',zip='01003'WHERE last_name = 'York'AND first_name='Jerome';
MySQL 入门基础语句(增删改查)MySQL 入门基础语句增删改查创建用户 授权创建数据库 数据表添加新的数据行检索信息删除或更新数据行创建用户 & 授权CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';GRANT ALL ON *.* TO 'tinydolphin'@'local