Movements under the water

, 03 February 2023
Movements under the water
Sprat shoal © Paul Naylor

By Ella Garrud

Living Seas Officer 

Shoals

Did you know? A shoal of fish is a group of fish swimming in a loose cluster, unorganised and moving in different directions. A school of fish is a synchronised group of the same species, all swimming in the same direction. Amazingly, a school of fish does not have a leader. They self-organise, by co-ordinating with their direct neighbours, using sight and their lateral line – an organ along the side of a fish’s body which can sense very subtle water pressure changes. If a neighbouring fish changes direction or speeds up, their lateral line will feel it and they can adapt their movement to that of their neighbour. In this way, a school of thousands of fish can move in a mesmerising, synchronised display.

Fishy tails

Bottlenose-dolphin © Caroline Weir
Bottlenose-dolphin © Caroline Weir

Have you ever wondered why the tails of fish and cetaceans (dolphins and whales) move differently? Whales and dolphins evolved from terrestrial mammals which walked on four legs positioned underneath their bodies, which meant their backbones bent up and down. As they evolved, whales and dolphins retained this motion, resulting in their flukes (tail fins) being positioned horizontally, propelling them through the water by moving up and down. This is called dorsoventral undulation. Fun fact: Whales and dolphins still actually have pelvic (hip) bones, despite no longer having back legs.

Stickleback © Derek Middleton
Stickleback © Derek Middleton

The ancestors of fish on the other hand, never walked on land on four legs, so their spines did not evolve to move up and down, but side to side. This means that fish have vertical tail fins that move from side to side, a movement called lateral undulation.

Leave a comment
Time Δ Debug Message - Perch Runway 3.2
1787971714.18520 [907] SELECT p.pagePath, pr.routePattern, pr.routeRegExp, p.pageTemplate, pr.routeOrder, s.settingValue AS siteOffline FROM swt_pages_staging p LEFT JOIN swt_page_routes pr ON p.pageID=pr.pageID LEFT JOIN swt_settings s ON s.settingID='siteOffline' UNION SELECT NULL AS pagePath, pr2.routePattern, pr2.routeRegExp, pr2.templatePath AS pageTemplate, pr2.routeOrder, NULL AS siteOffline FROM swt_page_routes pr2 WHERE templateID!=0 ORDER BY routeOrder ASC, pagePath ASC
1787971714.22980.0446Matched route: news/[slug:s]
1787971714.22990.0002Server address: 216.73.216.170
1787971714.230.0001Using master page: /templates/pages/blog/post.php
1787971714.230Page arguments:
Array
(
    [0] => /news/movements-under-the-water
    [s] => movements-under-the-water
    [1] => movements-under-the-water
)
1787971714.23020.0003 [1] SELECT * FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1787971714.23130.0011 [86] SELECT DISTINCT settingID, settingValue FROM swt_settings WHERE userID=0
1787971714.23360.0023 [1] SELECT locationID FROM swt_shop_tax_locations WHERE locationIsHome=1 LIMIT 1
1787971714.23430.0007INSERT INTO swt_shop_cart(memberID,locationID,currencyID,cartPricing,cartProperties) VALUES(NULL,'1',47,'standard','[]')
1787971714.23760.0033 [1] SELECT * FROM swt_shop_cart WHERE cartID=24576298
1787971714.23850.0009 [1] SELECT * FROM swt_shop_cart WHERE cartID=24576298
1787971714.23930.0008 [nil] SELECT * FROM swt_shop_sales WHERE saleFrom<='2026-08-29 02:48:00' AND saleTo>'2026-08-29 02:48:00' AND saleActive=1 AND saleDeleted IS NULL ORDER BY saleOrder ASC
1787971714.24080.0015 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='movements-under-the-water')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-08-29 02:48:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 10
1787971714.24530.0045 [1] SELECT FOUND_ROWS() AS `count`
1787971714.24610.0008 [1] SELECT * FROM swt_blog_posts WHERE postID=3001 AND postStatus='Published' AND postDateTime<='2026-08-29 02:48:00'
1787971714.24720.0011 [13] SELECT * FROM swt_blog_sections ORDER BY sectionTitle ASC
1787971714.24790.0007 [1] SELECT * FROM swt_blogs ORDER BY blogTitle ASC
1787971714.24870.0008 [1] SELECT * FROM swt_categories WHERE catID=207 LIMIT 1
1787971714.24930.0006 [1] SELECT * FROM swt_categories WHERE catID=44 LIMIT 1
1787971714.25010.0008Using template: /templates/blog/post.html
1787971714.25040.0002 [162] SELECT catID, catPath FROM swt_categories
1787971714.25140.0011 [1] SELECT * FROM swt_blog_posts WHERE postStatus='Published' AND postDateTime<='2026-08-29 02:48:00' AND postSlug='movements-under-the-water'
1787971714.28210.0306Using template: /templates/blog/post.html
1787971714.28260.0005 [250] SELECT country, countryID FROM swt_shop_countries WHERE countryActive=1 ORDER BY country ASC
1787971714.28460.002Using template: /templates/pages/attributes/seo.html
1787971714.28490.0003 [1] SELECT regionID, regionTemplate, regionPage, regionRev AS rev FROM swt_content_regions WHERE regionKey='Banner image' AND (regionPage='/news/post' OR regionPage='*')
1787971714.28610.0012 [nil] SELECT * FROM ( SELECT idx.itemID, c.regionID, idx.pageID, c.itemJSON, idx2.indexValue as sortval FROM swt_content_index idx JOIN swt_content_items c ON idx.itemID=c.itemID AND idx.itemRev=c.itemRev AND idx.regionID=c.regionID JOIN swt_content_index idx2 ON idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev AND idx2.indexKey='_order' WHERE ((idx.regionID=104 AND idx.itemRev=0)) AND idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev ) as tbl GROUP BY itemID, pageID, itemJSON, sortval, regionID ORDER BY sortval ASC
1787971714.28780.0018 [82] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageDepth >=0 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1787971714.29220.0044 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1787971714.29310.0009 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1787971714.29630.0032Using template: /templates/navigation/ps_nav_template.html
1787971714.29640.0001 [6] Using template: /templates/navigation/ps_nav_template_children.html
1787971714.2970.0006 [4] Using template: /templates/navigation/ps_nav_template_children.html
1787971714.29730.0003 [29] Using template: /templates/navigation/ps_nav_template_children.html
1787971714.29860.0014 [10] Using template: /templates/navigation/ps_nav_template_children.html
1787971714.29970.0011 [7] Using template: /templates/navigation/ps_nav_template_children.html
1787971714.30040.0007 [9] Using template: /templates/navigation/ps_nav_template_children.html
1787971714.30310.0027 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' OR pageSortPath='/news/post' LIMIT 1
1787971714.30420.0011 [1] SELECT * FROM swt_pages_staging WHERE pageHidden=0 AND pageNew=0 AND pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition
1787971714.30720.003 [1] Using template: /templates/navigation/breadcrumbs.html
1787971714.30770.0005Using template: /templates/blog/post.html
1787971714.30790.0003 [1] SELECT * FROM swt_blog_authors WHERE authorID='1' LIMIT 1
1787971714.30870.0007Using template: /templates/blog/author.html
1787971714.3090.0003 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='movements-under-the-water')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-08-29 02:48:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 1
1787971714.31180.0028 [1] SELECT FOUND_ROWS() AS `count`
1787971714.31240.0006 [1] Using template: /templates/blog/post.html
1787971714.3150.0025Using template: /templates/blog/comment_form.html
1787971714.31590.0009 [nil] SELECT * FROM swt_blog_comments WHERE 1=1 AND postID=3001 AND commentStatus='LIVE' ORDER BY FIELD(webmentionType, 'like', 'repost', 'comment', NULL) ASC, commentDateTime ASC
1787971714.39520.0793 [0] Using template: /templates/blog/comment.html
1787971714.39550.0002Using template: /templates/blog/post.html
1787971714.39570.0002 [1] SELECT * FROM swt_blog_authors WHERE authorID='1' LIMIT 1
1787971714.39660.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/what-we-do' OR pageSortPath='/what-we-do' LIMIT 1
1787971714.39760.001 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-002' LIMIT 1
1787971714.39830.0007 [7] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-002%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1787971714.40150.0032 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1787971714.40210.0007 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1787971714.40490.0027 [6] Using template: /templates/navigation/footer-nav.html
1787971714.40550.0007 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1787971714.40620.0007 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1787971714.40680.0006 [38] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' ORDER BY pageTreePosition ASC
1787971714.41030.0035 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1787971714.41120.0009 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1787971714.41410.0029 [10] Using template: /templates/navigation/footer-nav.html
1787971714.4170.0029 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/visit' OR pageSortPath='/visit' LIMIT 1
1787971714.41820.0012 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-004' LIMIT 1
1787971714.4190.0008 [30] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-004%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1787971714.42220.0032 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1787971714.42320.0009 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1787971714.4260.0029 [29] Using template: /templates/navigation/footer-nav.html
1787971714.42880.0028 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1787971714.42970.001 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1787971714.43050.0007 [11] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1787971714.43370.0033 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1787971714.43450.0008 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1787971714.43740.0029 [10] Using template: /templates/navigation/footer-nav.html
1787971714.43860.0012Request time: 0.2553
1787971714.43860Process time: 0.2551
1787971714.43870Memory: 1.6226