Mysql笔记2

3.2 输入查询:

  • SELECT VERSION(), CURRENT_DATE;:版本号和当前日期
    • 一个命令通常由SQL语句组成,随后跟着一个分号(有一些例外不需要分号)
    • 能够以大小写输入关键词
  • SELECT SIN(PI()/4), (4+1)*5;:它说明你能将mysql用作一个简单的计算器
  • SELECT VERSION(); SELECT NOW();:你可以在一行上输入多条语句,只需要以一个分号间隔开各语句
    • 也不必全在一个行内给出一个命令,较长命令可以输入到多个行中。mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束

3.3 创建并使用数据库

  • 3.3.1. 创建并选择数据库
    • GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';:开始创建前你应该询问MySQL管理员许可你使用自己的一个数据库
    • CREATE DATABASE menagerie;
      • 在Unix下,数据库名称是区分大小写的(不像SQL关键字,表名一样)
    • drop database db_name; :删除数据库
    • USE menagerie:选定这个数据库
  • 3.3.2 创建表
    • SHOW TABLES;:这时候看是空的,较难的部分是决定你的数据库结构应该是什么:你需要什么数据库表,各数据库表中有什么样的列。
    • CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);:尝试创建一个pet表
    • DESCRIBE pet;:查看表中的列的名称或类型
  • 3.3.3. 将数据装入表中
    • LOAD DATA LOCAL INFILE '/home/hzq/pet.txt' INTO TABLE pet LINES TERMINATED BY '\n';:如果你在/home/hzq/目录下有一个文件pet.txt,内容如下:(用TAB键分开)

      Whistler Gwen bird \N 1997-12-09 \N
      
    • INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);:insert是一种更常用的方式

  • 3.3.4. 从表检索信息
    • 3.3.4.1. 选择所有数据

      • SELECT * FROM pet;:选择所有数据
      • DELETE FROM pet;:清空表中的数据
      • UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';:修改表
    • 3.3.4.2. 选择特殊行

      • SELECT * FROM pet WHERE name = 'Bowser';
      • SELECT * FROM pet WHERE birth > '1998-1-1';:选择1998年以后出生的
      • SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
      • SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
      • SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm') OR (species = 'dog' AND sex = 'f');:注意AND优先级更高,使用括号是个好主意
    • 3.3.4.3. 选择特殊列

      • SELECT name, birth FROM pet;
      • SELECT owner FROM pet;:找出谁拥有宠物
      • SELECT DISTINCT owner FROM pet;:关键字DISTINCT检索出每个唯一的输出记录
      • SELECT name, species, birth FROM pet WHERE species = 'dog' OR species = 'cat';:查询狗和猫的出生日期
    • 3.3.4.4. 分类行

      • SELECT name, birth FROM pet ORDER BY birth;:按日期排序
    • 3.3.4.5. 日期计算

      • SELECT name, birth, CURDATE(),(YEAR(CURDATE())-YEAR(birth)) - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age FROM pet ORDER BY age;:按age输出,(RIGHT(CURDATE(),5)意思是截取日期的右边5个字符
      • SELECT name, birth, death,(YEAR(death)-YEAR(birth)) - (RIGHT(death,5)<RIGHT(birth,5)) AS age FROM pet WHERE death IS NOT NULL ORDER BY age;:查询已经死亡动物的死亡年龄并排序
      • SELECT name, birth FROM pet WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));找出下个月生日的动物
      • SELECT name, birth FROM pet WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;:功能同上
    • 3.3.4.6. NULL值操作

      • SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
      • SELECT 1 IS NULL, 1 IS NOT NULL;
      • SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;:测试NULL的用法
    • 3.3.4.7. 模式匹配

      • SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。
        • SELECT * FROM pet WHERE name LIKE 'b%';:使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE
        • SELECT * FROM pet WHERE name LIKE '%w%';:找出包含“w”的名字
        • SELECT * FROM pet WHERE name LIKE '_____';:找出正好包含5个字符的名字
      • 由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE)
        • ‘.’匹配任何单个的字符
        • “[…]”匹配在方括号内的任何字符
        • “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符
        • 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
        • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
        • SELECT * FROM pet WHERE name REGEXP '^b';:找出以“b”开头的名字
        • SELECT * FROM pet WHERE name REGEXP BINARY '^b';:BINARY关键字使其中一个字符串变为二进制字符串,从而强制使REGEXP比较区分大小写
        • SELECT * FROM pet WHERE name REGEXP 'fy$';:找出以“fy”结尾的名字
        • SELECT * FROM pet WHERE name REGEXP 'w';:找出包含一个“w”的名字
        • SELECT * FROM pet WHERE name REGEXP '^.....$';:找出包含正好5个字符的名字,注意这里的^$不能省
    • 3.3.4.8. 计数行

      • SELECT COUNT(*) FROM pet;:计算动物数目
      • SELECT owner, COUNT(*) FROM pet GROUP BY owner;:每个主人有多少宠物
        • 注意,使用GROUP BY对每个owner的所有记录分组,没有它,你会得到错误消息:
      • SELECT species, COUNT(*) FROM pet GROUP BY species;:每种动物的数量
      • SELECT sex, COUNT(*) FROM pet GROUP BY sex;:每种性别的动物数量
      • SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;:按种类和性别组合的动物数量
      • SELECT species, sex, COUNT(*) FROM pet WHERE species = 'dog' OR species = 'cat' GROUP BY species, sex;:若使用COUNT( ),你不必检索整个表
      • SELECT species, sex, COUNT(*) FROM pet WHERE sex IS NOT NULL GROUP BY species, sex;:你仅需要知道已知性别的按性别的动物数目
    • 3.3.4.9. 使用1个以上的表

      • CREATE TABLE event (name VARCHAR(20), date DATE,type VARCHAR(15), remark VARCHAR(255));:先创建另外一个表,然后加入数据
      • SELECT pet.name,(YEAR(date)-YEAR(birth)) - (RIGHT(date,5)<RIGHT(birth,5)) AS age, remark FROM pet, event WHERE pet.name = event.name AND event.type = 'litter';:假定你想要找出每只宠物的年龄。我们前面看到了如何通过两个日期计算年龄。event表中有母亲的生产日期,但是为了计算母亲的年龄,你需要她的出生日期,存储在pet表中。说明查询需要两个表
        • FROM子句列出两个表
        • 要指定一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录
        • 因为name列出现在两个表中,当引用列时,你一定要指定哪个表。把表名附在列名前即可以实现。
      • SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species FROM pet AS p1, pet AS p2 WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';:为了在你的宠物之中繁殖配偶,你可以用pet联结自身来进行相似种类的雄雌配对
    • 3.4. 获得数据库和表的信息

      • SELECT DATABASE();
      • SHOW TABLES;
      • DESCRIBE pet; :查询表的结构
    • 3.5. 在批处理模式下使用mysql

      • mysql < batch-file:想要运行的命令放在一个文件中,然后告诉mysql从文件读取它的输入
      • mysql -h host -u user -p < batch-file --force:如果你需要在命令行上指定连接参数,命令应为
        • –force:出现错误的时候仍继续执行脚本
      • mysql < batch-file > mysql.out:捕捉输出
    • 3.6. 常用查询的例子

         CREATE TABLE shop (
             -> article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
             -> dealer  CHAR(20)                 DEFAULT ''     NOT NULL,
             -> price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL,
             -> PRIMARY KEY(article, dealer));
      
         INSERT INTO shop VALUES
             -> (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),
             -> (3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
      
      • 3.6.1. 列的最大值
        • SELECT MAX(article) AS article FROM shop;
      • 3.6.2. 拥有某个列的最大值的行
        • SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop);
        • SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1;
      • 3.6.3. 列的最大值:按组
        • SELECT article, MAX(price) AS price FROM shop GROUP BY article;
      • 3.6.4. 拥有某个字段的组间最大值的行
        • SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
      • 3.6.5. 使用用户变量
        • SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
        • SELECT * FROM shop WHERE price=@min_price OR price=@max_price;:找出价格最高或最低的物品
      • 3.6.6. 使用外键
        • 。。。

3.4 表的操作

  • 3.4.1. 修改表

      ALTER table <表名>
      [ add <新列名> <数据类型> [完整性约束] ]
      [ drop <完整约束名> ]
      [ alter column<列名> <数据类型> ]
    
    • 例如:alter table student_info add stu_entrance date;
  • 3.4.2 删除表

    • drop table table_name1,table_name2;
    • drop table if exists students;
  • 3.4.3 插入记录

      insert into <表名>
      [ (<属性1>,<属性2>...) values (<常量1>,<常量2>...) ]
    
    • 例如:insert into s_info (s_id,s_name,s_sex,s_age) values (9028,‘陈东’,‘男’,18);
  • 3.4.4 更新记录

      updata <表名>
      set <列名>=<表达式>[,<列名>=<表达式>]...
      where <条件>
    
    • 例如:updata s_info set s_age=22 where s_id=9028
  • 3.4.5 删除记录

      delete from <表名> [where <条件>]
    
    • 例如:delete from s_info where s_id=9028
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值