mysql的基礎(chǔ)語(yǔ)句和外鍵查詢及其語(yǔ)句詳解(推薦)
思路:雙指針?biāo)悸房梢詥幔揖椭苯诱褿,如果后一個(gè)是1就cnt++,如果不是數(shù)字,用一個(gè)指針i指向G,另一個(gè)指針j移動(dòng),當(dāng)不是G時(shí)停止,統(tǒng)計(jì)G的個(gè)數(shù),如果是奇數(shù)個(gè)同時(shí)G的下一個(gè)是1,cnt++,如果為偶數(shù)同時(shí)G的下一個(gè)是1,就用那唯一一次機(jī)會(huì)G的國(guó)特抵消一次,cnt++,此后不再對(duì)偶數(shù)個(gè)G進(jìn)行cnt++,同時(shí)把i移動(dòng)到j(luò)指向G位置,就這樣一直遍歷字符串;
s = input() cnt = 0 king_used = False i = 0 while i < len(s): if s[i] == 'G': if i + 1 < len(s): if s[i + 1] == '1': cnt += 1 i += 2 continue elif s[i + 1] in ['2', '3']: i += 2 continue else: j = i + 1 while j < len(s) and s[j] == 'G': j += 1 g_count = j - i if g_count % 2 == 1: cnt += 1 elif g_count % 2 == 0 and not king_used: cnt += 1 king_used = True i = j else: i += 1 else: i += 1 print(cnt) 轉(zhuǎn)c++
我不知道為啥我c++代碼過(guò)不了,但是python嫩果
一、MySQL 基礎(chǔ)語(yǔ)句
1. 數(shù)據(jù)庫(kù)操作 創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE school_db;
刪除數(shù)據(jù)庫(kù)
DROP DATABASE school_db;
選擇數(shù)據(jù)庫(kù)
USE school_db;
2. 表操作 創(chuàng)建表
CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, gender ENUM('男', '女'), enrollment_date DATE DEFAULT CURRENT_DATE );
刪除表
DROP TABLE students;
修改表結(jié)構(gòu)
ALTER TABLE students ADD COLUMN email VARCHAR(100); ALTER TABLE students MODIFY COLUMN age TINYINT; ALTER TABLE students DROP COLUMN gender;
3. CRUD 操作
插入數(shù)據(jù)
INSERT INTO students (name, age, gender) VALUES ('張三', 18, '男'), ('李四', 19, '女');
查詢數(shù)據(jù)
-- 基本查詢 SELECT * FROM students; -- 條件查詢 SELECT name, age FROM students WHERE age > 18; -- 排序 SELECT * FROM students ORDER BY age DESC; -- 分組 SELECT gender, COUNT(*) FROM students GROUP BY gender; -- 分頁(yè) SELECT * FROM students LIMIT 5 OFFSET 0; -- 第一頁(yè),每頁(yè)5條
更新數(shù)據(jù)
UPDATE students SET age = 20 WHERE name = '張三';
刪除數(shù)據(jù)
DELETE FROM students WHERE student_id = 1;
二、外鍵與關(guān)聯(lián)查詢
1. 外鍵概念
外鍵(Foreign Key)用于建立表與表之間的關(guān)聯(lián)關(guān)系,確保數(shù)據(jù)完整性。
2. 創(chuàng)建帶外鍵的表
-- 班級(jí)表 CREATE TABLE classes ( class_id INT AUTO_INCREMENT PRIMARY KEY, class_name VARCHAR(50) NOT NULL, teacher VARCHAR(50) ); -- 學(xué)生表(帶外鍵) CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, class_id INT, FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE );
3. 外鍵約束選項(xiàng)
ON DELETE CASCADE
: 主表記錄刪除時(shí),從表相關(guān)記錄自動(dòng)刪除
ON DELETE SET NULL
: 主表記錄刪除時(shí),從表外鍵設(shè)為NULL
ON DELETE RESTRICT
: 拒絕刪除主表記錄(默認(rèn))
ON UPDATE CASCADE
: 主表主鍵更新時(shí),從表外鍵同步更新
4. 關(guān)聯(lián)查詢
內(nèi)連接(INNER JOIN)
SELECT s.name, s.age, c.class_name FROM students s INNER JOIN classes c ON s.class_id = c.class_id;
左連接(LEFT JOIN)
SELECT s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id;
右連接(RIGHT JOIN)
SELECT s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
全連接(FULL JOIN) - MySQL通過(guò)UNION實(shí)現(xiàn)
SELECT s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id UNION SELECT s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
三、完整示例
1. 創(chuàng)建數(shù)據(jù)庫(kù)和表
-- 創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE school_management; USE school_management; -- 創(chuàng)建班級(jí)表 CREATE TABLE classes ( class_id INT AUTO_INCREMENT PRIMARY KEY, class_name VARCHAR(50) NOT NULL, teacher VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 創(chuàng)建學(xué)生表(帶外鍵) CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT CHECK (age BETWEEN 10 AND 30), gender ENUM('男', '女'), class_id INT, FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 創(chuàng)建成績(jī)表(多外鍵) CREATE TABLE scores ( score_id INT AUTO_INCREMENT PRIMARY KEY, student_id INT, subject VARCHAR(50), score DECIMAL(5,2), exam_date DATE, FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE ON UPDATE CASCADE );
2. 插入測(cè)試數(shù)據(jù)
-- 插入班級(jí)數(shù)據(jù) INSERT INTO classes (class_name, teacher) VALUES ('一年級(jí)一班', '王老師'), ('一年級(jí)二班', '李老師'), ('二年級(jí)一班', '張老師'); -- 插入學(xué)生數(shù)據(jù) INSERT INTO students (name, age, gender, class_id) VALUES ('張三', 18, '男', 1), ('李四', 19, '女', 1), ('王五', 17, '男', 2), ('趙六', 20, '女', NULL); -- 插入成績(jī)數(shù)據(jù) INSERT INTO scores (student_id, subject, score, exam_date) VALUES (1, '數(shù)學(xué)', 90.5, '2023-06-15'), (1, '語(yǔ)文', 85.0, '2023-06-16'), (2, '數(shù)學(xué)', 92.0, '2023-06-15'), (3, '英語(yǔ)', 88.5, '2023-06-17');
3. 復(fù)雜查詢示例
查詢每個(gè)班級(jí)的學(xué)生人數(shù)
SELECT c.class_name, COUNT(s.student_id) AS student_count FROM classes c LEFT JOIN students s ON c.class_id = s.class_id GROUP BY c.class_id;
查詢學(xué)生及其班級(jí)和成績(jī)(多表連接)
SELECT s.name, s.age, c.class_name, sc.subject, sc.score FROM students s LEFT JOIN classes c ON s.class_id = c.class_id LEFT JOIN scores sc ON s.student_id = sc.student_id ORDER BY s.name, sc.subject;
查詢平均分高于85的班級(jí)
SELECT c.class_name, AVG(sc.score) AS avg_score FROM classes c JOIN students s ON c.class_id = s.class_id JOIN scores sc ON s.student_id = sc.student_id GROUP BY c.class_id HAVING avg_score > 85;
使用子查詢
-- 查詢沒(méi)有參加任何考試的學(xué)生 SELECT name FROM students WHERE student_id NOT IN (SELECT DISTINCT student_id FROM scores);
四、外鍵管理
1. 查看外鍵約束
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = 'school_management';
2. 刪除外鍵約束
ALTER TABLE students DROP FOREIGN KEY students_ibfk_1;
3. 添加外鍵約束
ALTER TABLE students ADD CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE;
到此這篇關(guān)于mysql的基礎(chǔ)語(yǔ)句和外鍵查詢及其語(yǔ)句的文章就介紹到這了,更多相關(guān)mysql的基礎(chǔ)語(yǔ)句和外鍵查詢及其語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫(kù)密碼
這篇文章主要介紹了如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫(kù)密碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06MySQL設(shè)置管理員密碼無(wú)法生效的問(wèn)題解析
這篇文章主要介紹了MySQL設(shè)置管理員密碼無(wú)法生效的問(wèn)題解析,一般在遇到?MySQL?問(wèn)題時(shí),建議對(duì)?MySQL?系統(tǒng)函數(shù)、數(shù)據(jù)庫(kù)內(nèi)部對(duì)象等進(jìn)行檢索而不是直接打印字符串,有時(shí)候可能對(duì)快速定位問(wèn)題原因有幫助,需要的朋友可以參考下2022-06-06mysql數(shù)據(jù)庫(kù)插入速度和讀取速度的調(diào)整記錄
由于項(xiàng)目變態(tài)需求;需要在一個(gè)比較短時(shí)間段急劇增加數(shù)據(jù)庫(kù)記錄(兩三天內(nèi),由于0增加至4億)。在整個(gè)過(guò)程調(diào)優(yōu)過(guò)程非常艱辛2012-07-07mysql安全啟動(dòng)腳本mysqld_safe詳細(xì)介紹
這篇文章主要介紹了mysql安全啟動(dòng)腳本mysqld_safe詳細(xì)介紹,mysqld_safe增加了一些安全特性,需要的朋友可以參考下2014-07-07mysql分區(qū)表的增刪改查的實(shí)現(xiàn)示例
增刪查改在數(shù)據(jù)庫(kù)中是很常見(jiàn)的操作,本文主要介紹了mysql分區(qū)表的增刪改查的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01MySQL四種日志binlog/redolog/relaylog/undolog詳解
undo?log主要存儲(chǔ)的也是邏輯日志,比如我們要insert一條數(shù)據(jù)了,那undo?log會(huì)記錄的一條對(duì)應(yīng)的delete日志,我們要update一條記錄時(shí),它會(huì)記錄一條對(duì)應(yīng)相反的update記錄,這篇文章主要介紹了MySQL四種日志binlog/redolog/relaylog/undolog,需要的朋友可以參考下2024-08-08MySQL數(shù)據(jù)庫(kù)多表操作通關(guān)指南(外鍵約束和多表聯(lián)合查詢)
看再多的資料不如自己親自動(dòng)手實(shí)戰(zhàn),往往實(shí)戰(zhàn)才能滲透知識(shí),下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)多表操作的相關(guān)資料,包含外鍵約束和多表聯(lián)合查詢等,需要的朋友可以參考下2022-06-06