基于MySQL的基础笔记
USE sql_store;
意思为使用这个数据库在MySQL里面 然后就可以用了 也可以双击它 记得这里要有分号结束
SELECT *
FROM customers
意思为查询全部从customers的表格 为了统一好格式 SQL语句最好大写
点击黄色闪电按钮 就可以执行了
WHERE customer_id = 1
ORDER BY first_name
上面的where为定位到详细表格的具体一行 order by则为显示他们通过first_name的排序顺序
如果要注释SQL就在语句前面加上-- 就行了
通常我们不会直接用 * 来查询全部数据 因为那会给服务器 数据库和网络造成很大压力 通常需要精确查询比如
SELECT
last_name,
first_name,
points,
(points + 10) * 100 AS discount_facto
FROM customers
可以注意到 在查询的时候是可以进行四则运算的 只要格式写对 AS可以临时做为Column的名字中间是不能有空格的 如果要加空格就得左右加上 ' 或者 " 就像 AS 'discount facotr' AS "discount factor"
SELECT DINSTINCT state
FROM customers
before: after:
distinct的作用为去重复 如果查出来state 里FL有好几个 那么它只会显示一个
WHERE 还可以 加上判断符号更精确查找像 WHERE state = 'VA' WHERE points < 3000 WHERE birth_date > '1990-01-01'
此外 还可以用逻辑符号连接两个条件在WHERE后面 像
WHERE birth_date > '1990-01-01' AND points > 100
WHERE birth_date > '1990-01-01' OR points > 100
WHERE birth_date > '1990-01-01' OR points > 100 AND state = 'VA'
AND 为 两边条件都要满足才实现
OR 为只要一边条件满足就行
AND的权重更高 所以在多个判断符号时 先执行AND 后OR 但也可以通过括号改变他们的权重
此外 还可以再进行一次反转 WHERE NOT birth_date > '1990-01-01' OR points > 100 AND state = 'VA'
加上了NOT之后 查到的就是除了这些条件的人之外剩余哪些
一些人可能会说 可以这样查询吗 WHERE state = 'VA' OR 'GA' OR 'FL' 答案是不行的 因为OR没有这么高级 它只能判断返回的布尔值 也就是要么这个语句符合条件为true 或者false 所以一定要写完整 WHERE state = 'VA' OR state = 'GA' OR state = 'FL'
但也有一种方式可以实现 那就是 WHERE state IN ('VA', 'FL', 'GA') 这样就可以实现了 同时这里也可以用NOT 就像 WHERE state NOT IN ('VA', 'FL', 'GA') 来查找 不在这些州的人
如果我们要查询分数大于2000 小于4000的该怎么办呢 正常人想的应该是 WHERE points > 2000 AND points < 4000 但是 现在又有一种简便写法 WHERE points BETWEEN 2000 AND 4000
如果我们要查找姓氏里面b字母开头的人该怎么办呢 这时LIKE 就出场了 WHERE last_name LIKE 'b%' 这样就能查询到了 %代表了结束 同理 如果只是查询含b的名字就改成 '%b%' 末尾含b就是 '%b'
再次基础上 如果我们要查询到 b开头 隔了4个字母又是y结尾的单词 该怎么查询呢 WHERE last_name LIKE 'b____y' 这样就也可以查询到了
LIKE '%blesh%' 还能怎么升级呢 当然是 REGEXP 'blesh' 更简单的写法 功能一样 有人可能要问那我查开头结尾单词在 REGEXP里面还是 % 吗 答案是 改变了 开头是 ^ 结尾是 $ 举个例子 查开头为a 就是 WHERE last_name REGEXP '^a' 结尾为field 的话就是 WHERE last_name REGEXP 'field$' 所以需要注意顺序
WHERE last_name LIKE '%field%' OR '%mac%' 也可以代替为 WHERE last_name REGEXP 'field|mac' 表示多个搜索模式 更加简洁
WHERE last_name REGEXP '[gim]e' 中括号里面的东西表示为可以和外面e搭配的字母 也就是ge, ie, me 中括号里还可以用略写 如 '[g-h]e' 这个时候 g-h的那些字母都会和外面的e合并一个一个查询
同时一些属性没有 我们也可以查询 像一些顾客没有留电话号码 要想快速找到他们可以用
SELECT *
FROM custoemrs
WHERE phone IS NULL
注意 也可以用NOT 在这里 也就是 WHERE phone IS NOT NULL查找 留了号码的人
当我们SELECT * FROM customers 会默认按照customer_id 来排序 像下面的图
这是因为customer_id 为这个tab